在本文中,我们介绍了Python包。
Python包是一组具有共同用途的模块。包目录必须有一个名为__init__.py
的特殊文件。(自Python3.3起,不再需要__init__.py
来定义包目录。)Python模块是单个Python文件。
当我们处理包含成百上千个模块的大型项目时,使用包是至关重要的。例如,我们可以将所有与数据库相关的模块放在一个database包中,将用户界面代码放在ui包中。
预定义目录中可用的内置包;例如,DebianLinux上的/usr/lib/python3.5
或C:\Users\Jano\AppData\Local\Programs\Python\Python36-32\Lib\site-packages.
第三方软件包安装到预定义的目录中,例如DebianLinux上的/usr/local/lib/python3.5/dist-packages
或C:\Users\Jano\AppDataWindows上的\Local\Programs\Python\Python36-32\libs
。
Python包管理
Python包由Python包管理器pip
管理。
$ sudo pip3 install arrow
比如箭头库是用上面的命令安装的。
$ sudo pip3 uninstall arrow
要卸载箭头,我们使用上面的命令。
带有空__init__.py的Python包
在第一个例子中,我们用Python创建了一个简单的包。
$ tree . âââ mymath â âââ __init__.py â âââ mfuns.py âââ myprog.py
在我们当前的工作目录中,我们有一个mymath
目录和一个myprog.py
脚本。mymath
包含__init__.py
文件,该文件将mymath
目录标记为包目录。
mymath
目录有两个文件:__init__.py
文件使常量成为一个Python包目录,而mfuns.py
是一个Python模块。
__init__.py
是空白的。它可以包含一些代码,但也可以是空的。
def mycube(x): return x * x * x
在mfuns.py
模块中,我们定义了一个cube
函数。
#!/usr/bin/python # myprog.py from mymath.mfuns import mycube print(mycube(3))
在myprog.py
程序中,我们从mymath.mfuns
模块导入mycube
函数。模块名称和包名称以点字符分隔。
__init__.py中的Python导入函数
在下一个示例中,我们在__init__.py
文件中有一些代码。
$ tree . âââ mymath â âââ __init__.py â âââ mfuns.py âââ myprog.py
我们有相同的目录结构。
from .mfuns import mycube
在__init__.py
文件中,我们导入mycube
函数。因此,当我们引用mymath
包中的mycube
函数时,我们不必指定模块名称。
def mycube(x): return x * x * x
在mfuns.py
模块中,我们定义了一个cube
函数。
#!/usr/bin/python # myprog.py from mymath import mycube print(mycube(3))
在myprog.py
程序中,我们导入了mycube
函数。这次我们省略了模块名称。
没有__init__.py的Python包
从Python3.3开始,可以在不使用__init__.py
文件的情况下定义包目录。
read.py constants/ data.py
在我们当前的工作目录中,我们有一个constants
目录和一个read.py
脚本。
colours = ('yellow', 'blue', 'red', 'orange', 'brown') names = ('Jack', 'Jessica', 'Robert', 'Lucy', 'Tom')
data.py
模块有两个元组。
#!/usr/bin/python # read.py from constants.data import colours import constants.data as mydata print(colours) print(mydata.names)
在read.py
脚本中,我们导入元组并将它们打印到终端。
$ ./read.py ('yellow', 'blue', 'red', 'orange', 'brown') ('Jack', 'Jessica', 'Robert', 'Lucy', 'Tom')
Python箭头包
箭头是用于在Python中处理日期和时间的第三方库。
$ ls /usr/local/lib/python3.5/dist-packages/arrow api.py arrow.py factory.py formatter.py __init__.py locales.py parser.py __pycache__ util.py
该库安装在箭头目录中,在DebianLinux中的dist-packages
下。该库是使用pip
包管理器安装的。正如我们所见,该库是Python模块的集合。
Python子包
我们也可以创建子包。要访问子包,我们使用点运算符。
$ tree . âââ constants â âââ __init__.py â âââ data.py â âââ numbers â âââ __init__.py â âââ myintegers.py âââ read.py
from .data import names
这是constants
目录中的__init__.py
文件。我们导入names
元组。
names = ('Jack', 'Jessica', 'Robert', 'Lucy', 'Tom')
这是constants
目录中的data.py
模块。它包含names
元组。
from .myintegers import myintegers
numbers包中的__init__.py
文件有这一行。
myintegers = (2, 3, 45, 6, 7, 8, 9)
整数模块定义了一个包含七个整数的元组。该元组将从read.py
脚本访问。
#!/usr/bin/python # read.py from constants import names from constants.numbers import myintegers print(names) print(myintegers)
这是read.py
程序。我们从constants
包中导入names
元组,从constants.numbers
子包中导入myintegers
元组。
$ ./read.py ('Jack', 'Jessica', 'Robert', 'Lucy', 'Tom') (2, 3, 45, 6, 7, 8, 9)
在本文中,我们介绍了Python包。
列出所有Python教程。