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

同目录Python脚本导入问题求助:跨文件调用函数遇ModuleNotFoundError

解决Python相对导入报错的问题

你遇到的是Python模块导入里很常见的「直接运行脚本导致相对导入失效」的问题,结合你的目录结构咱们一步步来解决:

你的目录结构是:

module/
├── __init__.py
├── sample.py
└── tester.py

问题根源

当你直接运行tester.py(比如执行python tester.py或者python module/tester.py)时,Python会把这个脚本标记为__main__模块,而非将它归到module这个package下。这时候用相对导入from .sample import *就会报错——因为.对应的是当前package,但__main__并不属于任何package,自然找不到对应的模块。

可行解决方案

方案1:以Package形式运行(官方推荐)

这是最规范的做法,能完美适配相对导入逻辑。你需要从module目录的上级目录执行命令:

python -m module.tester

这样Python会把module识别为合法的package,此时tester.py里的from .sample import *就能正常工作,.指向的就是module这个package。

方案2:修改导入语句(适合快速测试)

如果你习惯直接运行tester.py(比如在module目录下执行python tester.py),可以把相对导入改成绝对导入——因为此时module目录已经在Python的sys.path里了,直接写:

from sample import *

就能成功导入sample.py里的内容。

方案3:兼容两种运行方式的写法

如果需要脚本既能直接运行,又能作为package的一部分被其他模块导入,可以用try-except做兼容处理:

try:
    # 当作为package的一部分运行时(比如用python -m命令)
    from .sample import *
except ImportError:
    # 当直接运行脚本时
    from sample import *

额外小提示

  • 确保__init__.py存在(你的目录里已经有了),这是Python识别package的标志,哪怕文件是空的也没关系。
  • 尽量避免from ... import *的写法,虽然省事但容易引发命名冲突,建议明确导入需要的函数,比如from .sample import func1, func2。

内容的提问来源于stack exchange,提问作者Kesav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 06:37:46