在本文中,我们介绍了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教程。
