You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:保持目录结构解决moduleB内脚本导入moduleA失败问题

解决方案

问题根源

  1. 模块路径问题:直接运行moduleB/test_in_B.py时,Python的模块搜索路径默认只包含moduleB目录,找不到上级目录的moduleA。
  2. 循环导入问题: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:25:26