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

Python跨子目录导入模块遇ImportError的解决方法

解决Python模块导入错误问题

先修正明显的语法错误

你的process.py中导入语句存在语法问题:

# 错误写法
from dept_1 import ops.py
# 正确写法(同目录导入)
from . import ops
# 或者如果运行时工作目录是my_project根目录,也可以写
import dept_1.ops

核心导入问题的解决方法

以下是几种可行方案,可根据你的运行场景选择:

方案1:手动添加项目根目录到Python路径

在ops.py的最顶部添加代码,强制将项目根目录加入sys.path,让Python能找到common模块:

import sys
import os

# 获取当前文件的绝对路径,向上回溯到my_project目录
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if project_root not in sys.path:
    sys.path.append(project_root)

# 现在可以正常导入装饰器
from common.utils import decorator_1, decorator_2

方案2:使用相对导入(需按包结构运行)

如果将my_project作为Python包使用,可在ops.py中用相对导入语法:

# 三个点表示向上跳两级(从dept_1到my_project根目录)
from ...common.utils import decorator_1, decorator_2

注意:这种方式不能直接运行单个脚本(比如python dept_1/ops.py),必须从my_project目录外通过包模块方式运行,例如:

python -m my_project.dept_1.process

方案3:确保运行脚本时工作目录为项目根目录

打开终端切换到my_project目录下,再运行process.py:

cd /path/to/my_project
python dept_1/process.py

此时my_project会自动加入Python的搜索路径,ops.py中直接写from common.utils import decorator_1, decorator_2即可正常导入。

额外检查项

  • 确认common/utils.py中确实正确定义了decorator_1和decorator_2,无拼写错误,也不存在循环导入(比如utils.py是否导入了ops.py?循环导入会导致属性找不到)。
  • 给dept_1、dept_2、common目录各添加一个空的__init__.py文件,让Python明确识别它们为包(Python3.3+支持无__init__.py的命名空间包,但显式添加兼容性更好)。

内容的提问来源于stack exchange,提问作者Aditya Kumar Barik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:25:20