一篇文章入门Python生态系统

开发者从PHP、Ruby或其他语言转到Python时,最常碰到的第一个障碍,就是缺乏对Python生态系统的全面了解。开发者经常希望能有一个教程或是资源,向他们介绍如何以大致标准的方式完成大部分的任务。

本文中的内容,是对我所在公司内部维基百科的摘录,记录了面向网络应用开发的Python生态系统基础知识,目标受众则是公司实习生、培训人员以及从其他语言转型到Python的资深开发者。

文中所列的内容或资源是不完整的。我也打算把它当成一项一直在进行中的工作(work in perpetual progress)。希望经过不断的增补修订,本文会成为Python生态系统方面的一篇详尽教程。

目标受众

本文的目的,不是教大家Python编程语言。读完这篇教程,你也不会瞬间变成一名Python高手。我假设大家已经有一定的Python基础。如果你是初学者,那么别再继续读下去了。先去看看Zed Shaw所写的《笨办法学Python》,这是本质量很高的免费电子书,看完之后再回头阅读这篇教程吧。

我假设你们使用的是Linux(最好是Ubuntu/Debian)或是类Linux操作系统。为什么?因为这是我最熟悉的系统。我在Windows平台或Mac OS X平台上,没有专业的编程经验,只是测试过不同浏览器的兼容性。

你还可使用搜索引擎,查找你使用的操作系统中安装Python的最好方法。如果你有什么疑问,我强烈建议你去Stack Overflow平台上提问。

该选择哪个版本?

Python 2.x是目前的主流;Python 3是崭新的未来。如果你不关心这个问题,可以直接跳到下面的Python安装部分。(译者注:原文作者写这篇文章时是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之前,仔细查阅下这个网站的内容。

译者注:现在,主流第三方库和框架对Python 3的支持度已经很高。根据py3readiness网站的统计,360个最受欢迎的Python包中已经有315个支持Python 3。具体的支持情况,可以查看这个网站。一定程度上说,Python 3已经成为新的主流。

使用哪种虚拟机

Python的解释器,又叫做Python虚拟机,它有多种不同的实现。其中,主流实现方式是CPython,装机量也最高,同时也是其他虚拟机的参考实现。

PyPy是利用Python语言实现的Python;Jython则使用Java实现,并运行在Java虚拟机之上;IronPython是用.NET CLR实现的Python。

除非真的有重大理由,否则应该选择CPython版本的实现,避免出现意外情况。

如果这些有关版本和虚拟机的唠叨话让你读了头疼,那你只需要使用CPython 2.7.x即可。

Python安装

大部分Linux/Unix发行版和Mac OS X都预装了Python。如果你没有安装或者已有的版本比较旧,那么你可以通过下面的命令安装2.7.x版:

Ubuntu/Debian及其衍生系统

$ sudo apt-get install python2.7

sudo是类Unix系统中的一个程序,可以让用户以其他用户的权限(通常是超级用户或root用户)运行程序。

Fedora/Red Hat及类似系统

sudo yum install python2.7

在RHEL(Red Hat Enterprise Linux的缩写)平台上,你可能需要启用EPEL软件源(repositories),才能正常安装。

在本文后面的示例中,我会使用sudo程序;你应将其替换为自己版本中的相应命令或程序。

理解Python的包(package)

首先你需要了解的是,Python没有默认的包管理工具。事实上,Python语言中包的概念,也是十分松散的。

你可能也知道,Python代码按照模块(module)划分。一个模块,可以是只有一个函数的单个文件,也可以是包含一个或多个子模块的文件夹。包与模块之间的区别非常小,每个模块同时也可以视作一个包。

那么模块与包之间,到底有什么区别?要想解答这个问题,你首先要了解Python是如何查找模块的。

与其他编程环境类似,Python中也有一些函数和类(比如strlenException)是存在于全局作用域(global scope,在Python中被称为builtin scope)的,其他的函数和类则需要通过import语句进行引用。例如:

>>> import os
>>> from os.path import basename, dirname

这些包就在你的文件系统中的某处,所以能被import语句发现。那么Python是怎么知道这些模块的地址?原来,在你安装Python虚拟机的时候,就自动设置了这些地址。当然平台不同,这些地址也就不一样。

你可以通过sys.path查看系统中的包路径。这是我的笔记本运行该命令之后的输出结果,系统是Ubuntu 11.10 Oneric Ocelot。

>>> import sys

>>> print sys.path
['', '/usr/lib/python2.7',

'/usr/lib/python2.7/plat-linux2',

'/usr/lib/python2.7/lib-tk',

'/usr/lib/python2.7/lib-old',

'/usr/lib/python2.7/lib-dynload',

'/usr/local/lib/python2.7/dist-packages',

'/usr/lib/python2.7/dist-packages',

'/usr/lib/python2.7/dist-packages/PIL',

'/usr/lib/python2.7/dist-packages/gst-0.10',

'/usr/lib/python2.7/dist-packages/gtk-2.0',

'/usr/lib/pymodules/python2.7',

'/usr/lib/python2.7/dist-packages/ubuntu-sso-client',

'/usr/lib/python2.7/dist-packages/ubuntuone-client',

'/usr/lib/python2.7/dist-packages/ubuntuone-control-panel',

'/usr/lib/python2.7/dist-packages/ubuntuone-couch',

'/usr/lib/python2.7/dist-packages/ubuntuone-installer', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']

这行代码会告诉你Python搜索指定包的所有路径,这个路径就存储在一个Python列表数据类型中。它会先从第一个路径开始,一直往下检索,直到找到匹配的路径名。这

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值