目前笔者正在用python开发的工程,目录这样组织
project/ # 项目目录 lib1/ # 与数据导入,解析,计算有关的功能 __init__.py dataload.py # 包含有 load函数 dataspar.py compute.py # 包含有 compute函数 ... lib2/ # 数据导入耗时,计算用的模型 __init__.py model.py # 包含有 model 类 time.py ... doc/ # 项目文档目录 app.py # 主要功能的集成,内部测试用 servicecase.py # 主要功能的集成,对外服务用 README.md
这个工程中模块之间有这样的依赖关系:
- 同一个子目录之间有依赖,lib1中的 compute 中要依赖 dataload 模块
- 不同的子目录之间有依赖,lib1中的 compute 要依赖 lib2中的 model 模块
- 父目录对子目录有依赖,app 和servicecase 要依赖 lib1 中 的compute 模块
解决方式:
- 同一个子目录之间导入,compute 导入dataload 的 load 函数。使用相对导入
from .dataload import load # 在compute.py中
注意,这里需要加.
,限定在当前./lib1
目录中寻找dataload模块。
- 不同子目录之间导入,compute 导入 model 中的 model 类。将上级目录加入搜索路径后导入
import sys # 在compute.py中 sys.path.append('..') from lib2.model import model
注意,sys.path.append
这句是将上一级目录,即./project
目录加入库搜索路径。然后问题就转化为,如何在父目录导入子目录内的类或函数,请查看下一条。
- 父目录导入子目录的类或函数,import 包名.模块 即可
from lib1.compute import compute # 在servicecase.py中
总结
主要留意解决方式中的第1,2点,相信这也是很多人能看到这里的原因。主打一个信息提炼,没有废话,就是情景展示vs解决方式。如果还不能解决你的问题,请留言讨论。