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

Python使用非相对路径导入兄弟模块函数遇ModuleNotFoundError问题

问题解答

1. 为什么有__init__.py仍找不到Example模块?

Python查找模块时只会在sys.path列表中的目录里搜索。当你直接运行B/functions.py时,Python会自动把该脚本所在的B目录加入sys.path,而Example包所在的父目录并不在这个搜索列表里——哪怕Example下有__init__.py,Python也找不到这个顶层包的位置,自然会报错。

2. 除修改sys.path外的解决办法,以及生产环境的运行逻辑

可行解决办法:

  • 以模块方式运行脚本:切换到Example的父目录,执行以下命令:
    python -m Example.B.functions
    
    这种运行方式会把当前工作目录(Example的父目录)加入sys.path,Python就能正确识别Example这个顶层包,导入语句也能正常生效。
  • 使用相对导入:把B/functions.py里的导入语句改成相对路径形式:
    from ..A.functions import a_function
    
    注意这种写法同样需要用python -m Example.B.functions运行,不能直接执行脚本(直接运行时相对导入会触发错误)。
  • 打包安装Example包:通过setup.py或pyproject.toml配置打包,将Example包安装到Python的site-packages目录(开发阶段可以用pip install -e .做可编辑安装,生产环境直接安装正式包)。安装后Example会成为全局可导入的包,无论在哪运行都能被Python找到。

生产环境的正常运行逻辑:

生产环境不会直接运行包内的单个脚本,通常是以下几种方式:

  1. 将整个Example包安装到系统或虚拟环境的site-packages中,此时包在Python的默认搜索路径里,任何代码都能直接导入Example下的模块。
  2. 有一个独立的启动脚本放在Example的父目录,由这个脚本负责导入Example包中的模块并执行逻辑,此时父目录在sys.path内,能正确识别包。
  3. 部分场景会通过设置PYTHONPATH环境变量,把Example的父目录加入搜索路径,确保Python能定位到包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:57:51