源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

一篇文章入门Python生态系统(Python新手入门指导)

  • 时间:2021-06-18 04:52 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:一篇文章入门Python生态系统(Python新手入门指导)
译者按:原文写于2011年末,虽然文中关于Python 3的一些说法可以说已经不成立了,但是作为一篇面向从其他语言转型到Python的程序员来说,本文对Python的生态系统还是做了较为全面的介绍。文中提到了一些第三方库,但是Python社区中强大的第三方库并不止这些,欢迎各位Pytonistas补充。 •原文链接:http://mirnazim.org/writings/python-ecosystem-introduction/ •译文链接:http://codingpy.com/article/python-ecosystem-introduction/ 开发者从PHP、Ruby或其他语言转到Python时,最常碰到的第一个障碍,就是缺乏对Python生态系统的全面了解。开发者经常希望能有一个教程或是资源,向他们介绍如何以大致标准的方式完成大部分的任务。 本文中的内容,是对我所在公司内部维基百科的摘录,记录了面向网络应用开发的Python生态系统基础知识,目标受众则是公司实习生、培训人员以及从其他语言转型到Python的资深开发者。 文中所列的内容或资源是不完整的。我也打算把它当成一项一直在进行中的工作(work in perpetual progress)。希望经过不断的增补修订,本文会成为Python生态系统方面的一篇详尽教程。 [b]目标受众[/b] 本文的目的,不是教大家Python编程语言。读完这篇教程,你也不会瞬间变成一名Python高手。我假设大家已经有一定的Python基础。如果你是初学者,那么别再继续读下去了。先去看看Zed Shaw所写的[url=http://learnpythonthehardway.org/]《笨办法学Python》[/url],这是本质量很高的免费电子书,看完之后再回头阅读这篇教程吧。 我假设你们使用的是Linux(最好是Ubuntu/Debian)或是类Linux操作系统。为什么?因为这是我最熟悉的系统。我在Windows平台或Mac OS X平台上,没有专业的编程经验,只是测试过不同浏览器的兼容性。如果你用的是这两个平台,那么请参考下面的资料安装Python。 [list] [*][url=http://www.blog.pythonlibrary.org/2011/11/24/python-101-setting-up-python-on-windows/]Python 101: Setting up Python on Windows[/url][/*] [*][url=http://codingpy.com/article/python-ecosystem-introduction/Official%20documentation%20for%20Python%20on%20Windows]Official documentation for Python on Windows[/url][/*] [*][url=http://docs.python.org/using/mac.html]Official documentation for Python on Mac OS X[/url][/*] [/list] 你还可使用搜索引擎,查找你使用的操作系统中安装Python的最好方法。如果你有什么疑问,我强烈建议你去[url=http://www.stackoverflow.com/]Stack Overflow[/url]平台上提问。 [b]该选择哪个版本?[/b] Python 2.x是目前的主流;Python 3是崭新的未来。如果你不关心这个问题,可以直接跳到下面的[b]Python安装[/b]部分。(译者注:原文作者写这篇文章时是2011年,当时Python 3才发展没几年。) 刚接触Python的话,安装3.x版本看上去是很自然的第一步,但是这可能并不是你想要的。 目前有两个积极开发中的Python版本——2.7.x与3.x(也被称为Python 3, Py3K和Python 3000)。Python 3是一个不同于Python 2的语言。二者在语义、语法上,既存在细微的区别,又有着截然不同的一面。截至今天,Python2.6/2.7是安装数量和使用度最高的版本。许多主流的Python库、框架、工具都没有做到100%兼容Python 3。 因此,最稳妥的选择就是使用2.x版(更准确的说,即2.7.x)。务必只在你需要或者完全了解情况的前提下,才选择Python 3。 Python 3 Wall of Shame网站记录了Python 3对各种库的兼容情况。在使用Python 3之前,仔细查阅下这个网站的内容。 [quote] 译者注:现在,主流第三方库和框架对Python 3的支持度已经很高。根据py3readiness网站的统计,360个最受欢迎的Python包中已经有315个支持Python 3。具体的支持情况,可以查看[url=http://py3readiness.org/]这个网站[/url]。一定程度上说,Python 3已经成为新的主流。 [/quote] [b]使用哪种虚拟机[/b] Python的解释器,又叫做Python虚拟机,它有多种不同的实现。其中,主流实现方式是CPython,装机量也最高,同时也是其他虚拟机的参考实现。 PyPy是利用Python语言实现的Python;Jython则使用Java实现,并运行在Java虚拟机之上;IronPython是用.NET CLR实现的Python。 除非真的有重大理由,否则应该选择CPython版本的实现,避免出现意外情况。 如果这些有关版本和虚拟机的唠叨话让你读了头疼,那你只需要使用CPython 2.7.x即可。 [b]Python安装[/b] 大部分Linux/Unix发行版和Mac OS X都预装了Python。如果你没有安装或者已有的版本比较旧,那么你可以通过下面的命令安装2.7.x版: Ubuntu/Debian及其衍生系统
[url=http://docs.python.org/library/site.html]官方文档[/url]。 [b]PYTHONPATH环境变量[/b] PYTHONPATH是一个可以用来增强默认包检索路径的环境变量。可以把它看作是一个PATH变量,但是一个只针对Python的变量。它只是一些包含有Python模块的文件路径列表(不是sys.path所返回的Python列表),每个路径之间以:分隔。设置方法很简单,如下:
[url=http://pypi.python.org/pypi]Python包索引(也被称为PyPI)[/url] [*]各种源码托管服务,如[url=https://launchpad.net/]Launchpad[/url], [url=http://github.com/]Github[/url], [url=https://bitbucket.org/]Bitbucket[/url]等。[/*] [/list] [b]通过系统自带的包管理器安装[/b] 使用系统自带的包管理器安装,只需要在命令行输入相应命令,或是使用你用来安装其他应用的GUI应用即可。举个例子,要在Ubuntu系统上安装simplejson(一个JSON解析工具),你可以输入下面的命令: $ sudo apt-get install python-simplejson [b]通过pip安装[/b] [i][code]easy_install[/code]已经不太受开发者欢迎。本文将重点介绍[code]easy_install[/code]的替代者——[code]pip[/code]。[/i] [code]pip[/code]是一个用来安装和管理Python包的工具。它并不是一个Python虚拟机自带的模块,所以我们需要先安装。在Linux系统中,我一般会这样操作:
$ sudo apt-get install python-pip
在安装其他包之前,我总是会把[code]pip[/code]升级到PyPI中的最新版本,因为Ubuntu默认源中的版本比PyPI的低。我这样升级[code]pip[/code]。
$ sudo pip install pip --upgrade
现在,你可以通过运行[code]run pip install package-name[/code],安装任何Python包。所以,要安装[code]simplejson[/code]的话,你可以运行以下命令:
$ sudo pip install simplejson
移除包也一样简单。
$ sudo pip uninstall simplejson
[code]pip[/code]默认会安装PyPI上最新的稳定版,但是很多时候,你会希望安装指定版本的包,因为你的项目依赖那个特定的版本。要想指定包的版本,你可以这样做:
$ sudo pip install simplejson==2.2.1
你还会经常需要升级、降级或者重装一些包。你可以通过下面的命令实现:
$ sudo pip install simplejson --upgrade   # Upgrade a package to the latest version from PyPI
$ sudo pip install simplejson==2.2.1 --upgrade # Upgrade/downgrade a package to a given version
接下来,假设你想安装某个包的开发版本,但是代码没有放在PyPI上,而是在版本控制仓库中,你该怎么办?[code]pip[/code]也可以满足这个需求,但是在此之前,你需要在系统上安装相应的版本控制系统(VCS)。在Ubuntu平台,你可以输入下面的命令:
$ sudo apt-get install git-core mercurial subversion
安装好VCS之后,你可以通过下面的方式从远程仓库中安装一个包:
[url=http://www.doughellmann.com/projects/virtualenvwrapper/]virtualenvwrapper项目主页[/url]查看更多命令和配置选项。 [h2]通过pip和virtualenv进行基本的依赖包管理[/h2] [code]pip[/code]与[code]virtualenv[/code]结合使用,可以为项目提供基本的依赖包管理功能。 你可以使用[code]pip freeze[/code]导出目前安装的包列表。例如,下面就是我用来开发这个博客网站所用的Python包:
$ pip freeze -l 
Jinja2==2.6
PyYAML==3.10
Pygments==1.4
distribute==0.6.19
markdown2==1.0.1.19
注意,我使用了-l选项。它告诉[code]pip[/code]只导出当前激活的虚拟环境中安装的包,忽略全局安装的包。 你可以将导出的列表保存至文件,并把文件添加到版本控制系统(VCS)。
$ pip freeze -l > requirements.txt
通过[code]pip[/code],我们可以从写入了[code]pip freeze[/code]命令结果的文件中,安装相应的包。 [b]其他重要工具[/b] 前面我们介绍了有关Python版本、虚拟机和包管理的基础知识,但是日常工作中还有其他任务需要使用专门的工具来完成。虽然我无法详细介绍每一个工具,我会尽量做一个大概的介绍。 提前说声对不起,因为下面介绍的大部分工具都是与网络应用开发相关的。 [b]编辑器[/b] 提供在Python中进行编程的优秀编辑器有很多。我个人倾向于Vim,但是我不想引发一场[i]编辑器优劣大战[/i]。 对Python编程支持较好地编辑器和集成开发环境(IDEs),主要有Vim/GVim, Emacs, GNOME主题下的GEdit, Komodo Edit, Wing IDE, [url=http://codingpy.com/article/jetbrains-releases-pycharm5/]PyCharm[/url]等。还有其他编辑器,但是上面列举的这些应该是最受欢迎的。你应该选择最适合自己的工具。 [b]Pyflakes:源码检查[/b] Pyflakes是一个简单的程序,通过分析文件的文本内容,检查Python源文件中的错误。它可以检查语法和部分逻辑错误,识别被引用但没有使用的模块,以及只使用了一次的变量,等等。 你可以通过pip安装: $ pip install pyflakes 然后像下面那样,在命令行调用pyflakes,传入Python源文件作为参数: $ pyflakes filename.py Pyflakes还可以嵌入到你的编辑器中。下面这张图显示的是嵌入了Vim之后的情况。注意出现了红色的波浪线。 [img]http://files.jb51.net/file_images/article/201512/vim-pyflakes.png[/img] 你可以在Stack Overflow上咨询如何在你使用的编辑器重添加Pyflakes支持。 Requests:为人类开发的HTTP库 Requests库让你轻轻松松使用HTTP协议。 首先通过pip安装: $ pip install requests 下面是一个简单的使用示例:
```
>>> import requests
>>> r = requests.get('https://api.github.com', auth=('user', 'pass'))
>>> r.status_code
204
>>> r.headers['content-type']
'application/json'
>>> r.content
...
```
更多详情,请查看[url=http://docs.python-requests.org/en/latest/index.html]Requests的文档[/url]。 [b]Flask:网络开发微框架[/b] Flask是一个基于Werkzeug与Jinja2这两个库的Python微框架。 首先通过pip安装: $ pip install Flask 下面是一个简单的使用示例:
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
  return "Hello World!"

if __name__ == "__main__":
  app.run()
这样运行Flask应用: $ python hello.py * Running on http://localhost:5000/ [url=http://flask.pocoo.org/]Flask官网[/url] [b]Django:面向网络开发的全栈框架[/b] Django是一个全栈网络框架。它提供了ORM、HTTP库、表格处理、XSS过滤、模板引擎以及其他功能。 这样通过pip安装: $ pip install Django 前往[url=http://djangoproject.com/]Django官网[/url],跟着教程学习即可。非常简单。 [b]Fabric:简化使用SSH部署网站和执行系统管理任务的方式[/b] Fabric是一个命令行工具,可以简化使用SSH进行网站部署或执行系统管理任务的过程。 它提供了一套基本的操作,可以执行本地或远程命令行命令,上传/下载文件,以及提示用户进行输入或者取消执行等辅助性功能。 你可以通过pip安装: $ pip install fabric 下面是用Fabric写的一个简单任务:
from fabric.api import run
def host_type():
  run('uname -s
接下来,你可以在一个或多个服务器上执行该任务:
$ fab -H localhost host_type
[localhost] run: uname -s
[localhost] out: Linux

Done.
Disconnecting from localhost... done.
[url=http://fabfile.org/]Fabric官网[/url] [b]SciPy:Python中的科学计算工具[/b] 如果你的工作涉及科学计算或数学计算,那么SciPy就是必不可少的工具。 SciPy (pronounced "Sigh Pie") 是一个开源的数学、科学和工程计算包。SciPy包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。与其功能相类似的软件还有MATLAB、GNU Octave和Scilab。SciPy目前在BSD许可证下发布。它的开发由Enthought资助 前往[url=http://www.scipy.org/]SciPy官网[/url],获取详细的下载/安装说明以及文档。 [b]PEP 8:Python风格指南[/b] 虽然PEP 8本身不是一个工具,但毋庸置疑的是,它是Python开发方面一个非常重要的文件。 PEP 8这个文件中,定义了主流Python发行版本中标准库的编码规范。文件的唯一目的,就是确保其他的Python代码都能遵守同样地代码结构以及变量、类和函数命名规律。确保你充分了解并遵循该风格指南。 [url=http://www.python.org/dev/peps/pep-0008/]PEP 8链接[/url] [b]强大的Python标准库[/b] Python的标准库内容非常丰富,提供了大量的功能。标准库中包含了众多内建模块(built-in modules,用C语言编写的),可以访问类似文件读/写(I/O)这样的系统功能,还包括了用Python编写的模块,提供了日常编程中许多问题的标准解决方案。其中一些模块的设计思路很明显,就是要鼓励和增强Python程序的可移植性,因此将平台相关的细节抽象为了不依赖于平台的API接口。 查看[url=http://docs.python.org/library/]标准库的官方文档[/url]。 [b]推荐阅读[/b] David Goodger的《如何像Python高手一样编程》一文,深入介绍了许多Python的惯用法和技巧,可以立刻为你增添许多有用的工具。 Doug Hellmann的系列文章[url=http://www.doughellmann.com/PyMOTW/contents.html]Python Module of the Week[/url]。这个系列的焦点,是为Python标准库中模块编写示例代码。 [b]结语[/b] 我在本文中所介绍的内容,触及的还只是Python生态系统的表面。Python世界中,几乎针对每一个你能想象到的任务,都存在相关的工具、库和软件。这些明显无法在一篇文章中尽述。你必须要自己慢慢探索。 Python有伟大的社区,社区中的人很聪明,也很有耐心,乐于帮助Python语言的初学者。所以,你可以选择一个最喜欢的开源项目,去它的IRC频道找人聊天;关注邮件列表,并积极提问;和有丰富Python系统实施经验的人交谈。慢慢地,随着你的经验和知识逐步积累,你也会成为他们之中的一员。 最后,我为大家推荐[b]Python之禅[/b]。反复回味、思考这几段话,你一定会有所启发!
>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部