Python:保持目录结构解决moduleB内脚本导入moduleA失败问题
解决方案
问题根源
- 模块路径问题:直接运行
moduleB/test_in_B.py时,Python的模块搜索路径默认只包含moduleB目录,找不到上级目录的moduleA。 - 循环导入问题:
moduleA/__init__.py和moduleB/__init__.py互相导入,就算路径问题解决,也会触发导入错误。
方法一:手动添加项目根路径 + 修复循环导入
步骤1:修改test_in_B.py,添加根路径到搜索列表
把项目根目录加入Python的模块搜索路径,这样就能找到moduleA:
import sys import os # 获取myproject目录的绝对路径 project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(project_root) from moduleA import users print(users.name)
步骤2:解决循环导入
删掉两个模块__init__.py里的互相导入语句:
- 清空
moduleA/__init__.py(或删除from moduleB import *) - 清空
moduleB/__init__.py(或删除from moduleA import *)
如果代码确实需要跨模块引用,不要在__init__.py顶层导入,而是在具体函数/类内部局部导入,比如:
# 比如moduleA里某个需要用moduleB的函数 def use_module_b(): from moduleB import some_obj # 这里写逻辑
方法二:使用相对导入(需以模块方式运行)
不想改路径的话,可以用相对导入,但不能直接运行test_in_B.py,必须从项目根目录以模块方式启动:
步骤1:修改test_in_B.py的导入语句
from ..moduleA import users print(users.name)
步骤2:从myproject目录执行命令
python -m moduleB.test_in_B
⚠️ 注意:这种方式同样需要先解决moduleA和moduleB的循环导入问题,否则依然会报错。
内容的提问来源于stack exchange,提问作者Saeed
相关产品推荐
相关产品推荐

