开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

Python包

在本文中,我们介绍了Python包。

Python是一组具有共同用途的模块。包目录必须有一个名为__init__.py的特殊文件。(自Python3.3起,不再需要__init__.py来定义包目录。)Python模块是单个Python文件。

当我们处理包含成百上千个模块的大型项目时,使用包是至关重要的。例如,我们可以将所有与数据库相关的模块放在一个database包中,将用户界面代码放在ui包中。

预定义目录中可用的内置包;例如,DebianLinux上的/usr/lib/python3.5C:\Users\Jano\AppData\Local\Programs\Python\Python36-32\Lib\site-packages.

第三方软件包安装到预定义的目录中,例如DebianLinux上的/usr/local/lib/python3.5/dist-packagesC:\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教程。

未经允许不得转载:我爱分享网 » Python包

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏