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

Python开发包时包内模块互相引用导入报错如何解决?

Python包内同级模块导入异常问题及解决方案

问题场景

尝试构建包含可互相导入模块的Python包时,出现跨场景导入异常问题,对应目录结构如下:

  • 包目录testpack,包含三个文件:test1.py、test2.py、空内容的__init__.py
  • testpack的父目录下存放入口文件main.py

各文件初始内容如下:

# test1.py
def demo():
    print("123")
    return 
# test2.py
import test1

def demo2():
    print("test 2")
    test1.demo()

if __name__=="__main__":
    demo2()
# main.py 
import testpack.test1
import testpack.test2

testpack.test2.demo2()

异常表现

  1. 直接单独运行test2.py,输出符合预期:
test 2
123
  1. 运行父目录下的main.py时报错,错误栈如下:
Traceback (most recent call last):
  File "E:/packages/main.py", line 2, in <module>
    import testpack.test2
  File "E:\packages\testpack\test2.py", line 1, in <module>
    import test1
ModuleNotFoundError: No module named 'test1'

即使修改main.py为如下写法,报错仍然存在:

# main.py 替代版本
from testpack.test2 import demo2

demo2()

原因及解决方案

问题原因

Python的导入路径解析逻辑会根据运行入口的位置动态调整,单独运行test2.py时,Python会将test2.py所在目录加入模块搜索路径,因此可以直接找到同目录下的test1;当从父目录的main.py作为入口运行时,模块搜索路径的根目录是main.py所在目录,test2.py中直接写import test1会尝试从根目录搜索test1模块,自然无法找到。

修复方法

将test2.py中的import test1替换为from . import test1即可。
语法规则:包内导入时,前缀.表示导入当前文件同级目录下的模块,..表示导入父目录下的模块,以此类推。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:09:02