文章目录
- 1. module和package的定义
- 2. 导入的写法
- 3. 相对导入和绝对导入
1. module和package的定义
在python中,一个.py文件就是一个模块(moudule)。只有一个主运行文件,特征是__name__= '__main__'
,多个模块通过**包(package)**的形式组织起来,包的特征是目录下包含一个__init__.py
的文件。在__init__py
文件中,我们常用的方式有:1. 通过__all__ = [moudle_name]
的方式自动导入。 2. 通过from . import module的方式导入。
注意:moudule_name 不含.py后缀。
2. 导入的写法
导入的写法主要有两种:
-
import modlue_name
这种写法只能导入package或module,并且使用内部函数或者类的时侯也要加上package或module name的前缀。 -
from ... import ...
这种写法比上面更强,还可以导入函数,类和变量,并且使用的时侯也不用加前缀。
3. 相对导入和绝对导入
- 绝对导入
与相对路径和绝对路径的概念一样。在python标准库sys中有一个sys.path
的变量,里面记录了绝对导入的搜索路径,当使用from A import B 的时侯就是从sys.path
中搜索A.B。另外,sys.path
中会包含当前主运行文件的路径作为sys.path
列表中的第一个元素。详见链接. - 相对导入
在相对导入的时侯写法与绝对导入有所不同,如果是当前目录下的module就在前面使用.
,如果是当前目录下子包中的模块就用包名前加.
来,例如
from . import module_name
from .package_name import module_name
相当不会从sys.path
中查找,而直接从当前路径下查找,python3中默认是绝对导入,详见链接.
注意:
1. 相对导入的写法只有前面讲的第二种形式,即from ... import ...
形式。
2. 对于主 运行文件不要使用相对导入,这是由于主文件中的.
由于主运行文件的__name__
被替换成里__main__
而不是文件名,因此会报找不到错误,如果非要使用相对导入,可以使用python -m dir.file
,详解在上一个链接中也有说到。
**3. 要深入理解绝对导入,绝对导入就是要导入在sys.path
中包含的模块,因此不能因为两个文件在同一目录下就是用绝对导入 **
4. 低层级的不能引用高层级的,即子目录不能import父目录的模块