声明:
- 本文中的project(项目)表示代码的最高层目录
- package即项目下的包
- module即一个.py文件
python 包间模块的互相调用
问题描述
虽然Python是一个轻量级的语言,有时候文件会很多,还是需要通过包(package)来帮助我们管理模块(module)。于是,我们用IDE写代码,通过“创建project——创建package——创建py文件”建立模块,编辑完成后运行,包间模块的调用没有问题。因为在这个过程中,IDE自动记录了包和模块之间的依赖关系,此时调用当前包外的同一个project下的文件不成问题。
倘若我们的代码需要以命令行的形式运行,那就会出现no module named ***
的问题。
分析问题: python解释器找不到模块,这是Python包间互相调用出了问题,或者说是工作目录的问题。
解决方案一
- 在project根目录下创建文件
__main__.py
- 命令行切换到project根目录下
- 执行
python -m 文件路径
,注意,这个时候文件路径的最后是没有.py
后缀的
优点是,只需要改动一个地方
缺点是,不能再使用python -m pdb foo.py
调试命令了。
详情见博客python项目内import其他内部package的模块的正确方法
解决方案二
在每个你需要调用外部包模块的文件头添加:
import sys
sys.path.append('你的项目地址')
优点是,简单方便
缺点是,需要改动每个调用外部包的文件