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

如何实现从源码根目录source_root开始的全局模块导入?

解决ModuleNotFoundError: No module named 'source_root'的问题

我之前也碰到过几乎一模一样的导入问题!咱们先拆解下场景,再一步步解决:

你的项目结构是这样的:

project_root
└── source_root
    ├── __init__.py
    └── inner_package
        ├── some_executable_file.py
        └── some_library_file.py

你尝试在some_executable_file.py中用from source_root.inner_package.some_library_file import X导入内容,但触发了ModuleNotFoundError: No module named 'source_root'——核心原因是Python的模块搜索路径里默认没有包含project_root,所以它找不到source_root这个顶级包。

下面是几个实用的解决方法,你可以根据自己的场景选择:

方法1:手动把project_root加入Python路径

在some_executable_file.py的最顶部添加以下代码,动态将项目根目录加入Python的搜索路径:

import sys
from pathlib import Path

# 从当前文件(some_executable_file.py)向上追溯三级目录,得到project_root的路径
project_root = Path(__file__).parent.parent.parent
sys.path.append(str(project_root))

# 现在可以正常执行导入了
from source_root.inner_package.some_library_file import X

这种方法的好处是不需要修改系统环境,代码本身就能适配路径。

方法2:使用相对导入(包内推荐)

如果只是在inner_package内部的文件之间互相导入,更推荐用Python的相对导入语法,不用写全路径:

# 在some_executable_file.py中直接这样写
from .some_library_file import X

这里的.代表当前所在的inner_package目录,这种方式更符合Python包的设计规范,前提是你把source_root当作一个完整的包来使用。

方法3:设置PYTHONPATH环境变量

如果你不想在代码里硬编码路径,可以通过设置环境变量让Python永久识别project_root:

  • Linux/macOS终端:
    export PYTHONPATH="/实际路径/project_root:$PYTHONPATH"
    
  • Windows命令行:
    set PYTHONPATH=C:\实际路径\project_root;%PYTHONPATH%
    

设置完成后,不管你在哪个目录运行脚本,Python都能找到source_root模块。

最后提醒下:确保source_root和inner_package里的__init__.py文件存在(你的结构里已经有了),这个空文件是Python识别目录为包的必要标志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:52:37