Python中的包
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的Python的应用环境。
考虑一个在Phone目录下的pots.py文件。这个文件有如下源代码:
1
2
3
4
5
|
#!/usr/bin/python # -*- coding: UTF-8 -*- def Pots(): print "I'm Pots Phone" |
同样地,我们有另外两个保存了不同函数的文件:
- Phone/Isdn.py 含有函数Isdn()
- Phone/G3.py 含有函数G3()
现在,在Phone目录下创建file __init__.py:
1
|
Phone/__init__.py |
当你导入Phone时,为了能够使用所有函数,你需要在__init__.py里使用显式的导入语句,如下:
1
2
3
|
from Pots import Pots from Isdn import Isdn from G3 import G3 |
当你把这些代码添加到__init__.py之后,导入Phone包的时候这些类就全都是可用的了。
1
2
3
4
5
6
7
8
9
|
#!/usr/bin/python # -*- coding: UTF-8 -*- # 导入 Phone 包 import Phone Phone.Pots() Phone.Isdn() Phone.G3() |
以上实例输出结果:
1
2
3
|
I'm Pots Phone I'm 3G Phone I'm ISDN Phone |
如上,为了举例,我们只在每个文件里放置了一个函数,但其实你可以放置许多函数。你也可以在这些文件里定义Python的类,然后为这些类建一个包。
Python的包管理工具
Distribute是对标准库disutils模块的增强,我们知道disutils主要是用来更加容易的打包和分发包,特别是对其他的包有依赖的包。
Distribute被创建是因为Setuptools包不再维护了。
安装Distribute
可以通过distribute_setup.py 脚本来安装Distribute,也可以通过easy_install, pip,源文件来安装,不过使用distribute_setup.py来安装是最简单和受欢迎的方式
1
2
|
$ curl -0 http: //python-distribute .org /distribute_setup .py $ sudo python distribute_setup.py |
Pip 是安装python包的工具,提供了安装包,列出已经安装的包,升级包以及卸载包的功能。
Pip 是对easy_install的取代,提供了和easy_install相同的查找包的功能,因此可以使用easy_install安装的包也同样可以使用pip进行安装。
安装Pip
Pip的安装可以通过源代码包,easy_install或者脚本。
下面介绍一下各种安装方法:
源代码方式:
1
2
3
4
5
6
|
$ wget http: //pypi .python.org /packages/source/p/pip/pip-0 .7.2. tar .gz (替换为最新的包) $ tar xzf pip-0.7.2. tar .gz $ cd pip-0.7.2 $ python setup.py install easy_install: $ easy_install pip |
get_pip.py 脚本:
1
2
|
$ curl -0 https: //raw .github.com /pypa/pip/master/contrib/get-pip .py $ sudo python get-pip.py |
OK, 下面来看一下Pip的使用
安装package
1
|
$ pip install Markdown |
列出安装的packages
1
|
$ pip freeze |
安装特定版本的package
通过使用==, >=, <=, >, <来指定一个版本号。
1
2
|
$ pip install 'Markdown<2.0' $ pip install 'Markdown>2.0,<2.0.3' |
升级包
升级包到当前最新的版本,可以使用-U 或者 --upgrade
1
|
$ pip install -U Markdown |
卸载包
1
|
$ pip uninstall Markdown |
查询包
1
|
pip search "Markdown" |
PS -- 包安装后的py文件路径:
1
|
/usr/local/lib/python2 .7 /dist-packages |