基础知识还没学好,就需要写python脚本,模块和包的导入遇到很多问题,百度看了很多方法,但总有遗漏之处,模模糊糊整了很久.
1. 模块介绍
名称 | 英文名 | 介绍 |
---|---|---|
模块 | moudle | 一个.py 文件 |
包 | package | 一个包含多个模块 的文件夹,并且文件夹下有一个__init__.py 文件 |
【注】:python3.3不再需要一个空的__init__.py
文件
2. 模块导入
对于一个这样的python目录结构:有main
函数,模块和包组成
现在一共存在几种情况的导入问题:
问题 | 描述 | 方法 |
---|---|---|
同目录模块导入 | 在main 中导入模块moudle | import moudle |
子目录模块导入 | 在main 中导入模块P1Moudle1 | import package1.P1Moudle1 |
包中同目录模块导入 | 在P1Moudle1 中导入模块P1Moudle2 | import package1.P1Moudle2 |
兄弟目录模块导入[注1] | 在P1Moudle1 中导入模块P2Moudle2 | import package2.P2Moudle1 |
父目录模块导入 | 在P1Moudle1 中导入模块moudle | import moudle |
[注1]兄弟目录和父目录需要先设置路径:
BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, BASE)
可能有更好的方法等待发现。
3. 减少依赖
需求引入:P1Moudle1
导入P1Moudle2
,P2Moudle2
导入P1Moudle1
.
导入方法:import P1Moudle2
import package1.P1Moudle1
产生问题:P2Moudle2
导入P1Moudle1
时,由于P1Moudle1
导入了P1Moudle2
,所以P2Moudle2
在继续导入P1Moudle2
时:导入语句就明显不对了。
解决方法:尽量减少同层次的导入,或者使用导入函数而不是导入整个包的方式