1. 在python中什么是包?
包
是一种组织代码的方式,如下图所示红色部分目录mypackage
就称为一个包,它之所以称为一个包完全是因为它里面有蓝色方框里的文件__init__.py
。
这个目录被定义为一个包之后,我们就可以通过import
来使用包中的模块,以.py
为结尾的文件是一个模块;
2. 如何使用包?
-
在包目录内使用包中的其他模块通过
from .XXX import NNN
来使用(相对导入),其中.
代表的是在包内进行调用,这样可以避免在全局中有多个重名包的情况下产生的包冲突,全局的意思就是除了这个包内以外的其他目录;例如:在
moduleA.py
中导入moduleB.py
from .submodule import moduleB
,其中,.
表示当前目录(也就是当前包)中的submodule子包,moduleB
在这个子包中; -
在包目录外使用包,就要使用绝对路径来调用包:
例如:
- 在
script.py
中导入moduleA.py
,因为script.py
文件在包外,所以调用直接用from mypackage import moduleA
,但是前提是mypackage包已经被加入到python
搜索路径中; - 如果想在
script.py
中导入moduleB.py:``script.py
中导入moduleA.py
- 在
3. 怎么将包路径加入到python搜索路径中?
-
添加到
PYTHONPATH
环境变量:- 你可以将模块所在的目录或其父目录的路径添加到
PYTHONPATH
环境变量中。这样,Python 解释器就会在这些目录中搜索被导入的模块。
- 你可以将模块所在的目录或其父目录的路径添加到
-
修改
sys.path
:- 在 Python 代码中,你可以动态地修改
sys.path
列表,将模块所在的目录或其父目录的路径添加进去。这通常在程序的开始处进行。
pythonC
import sys sys.path.append('/path/to/mypackage/parent/directory')
- 在 Python 代码中,你可以动态地修改
-
使用
.pth
文件:- 在 Python 的
site-packages
目录中创建一个.pth
文件,其中包含模块所在的目录或其父目录的路径。
- 在 Python 的
-
安装到 Python 环境:
- 如果
mypackage
是一个遵循标准 Python 包结构的包(包含__init__.py
文件),你可以使用setuptools
等工具将其安装到当前 Python 环境中。这通常通过在包的根目录运行python setup.py install
或pip install .
来完成。
- 如果
-
使用虚拟环境:
- 在虚拟环境中,你可以安装依赖包,包括你自己的包。使用
pip install /path/to/mypackage
可以将包安装到虚拟环境中,之后就可以在整个虚拟环境中使用绝对导入。
- 在虚拟环境中,你可以安装依赖包,包括你自己的包。使用
-
项目目录结构:
- 如果你的项目有一个明确的目录结构,你可以将所有模块和包放在项目的根目录下,这样它们自然就会被包含在 Python 的搜索路径中。