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

Python主包导入报ModuleNotFoundError的可行解决方案咨询

解决方案

方案1:将项目配置为可安装包(最推荐,通用性最强)

你提到的通过配置打包文件将项目做成可安装包的方案完全可以解决问题,私有仓库也不受影响,pip原生支持从私有Git仓库安装包,只要持有对应仓库的访问权限即可。
操作步骤如下:

  1. 在项目根目录(a文件夹)下新建pyproject.toml配置文件,示例内容:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "your_project_name"
version = "0.1.0"

[tool.setuptools.packages.find]
# 扫描当前目录下的所有包(即b包)
where = ["."]
  1. 安装包:
    • 本地开发/单元测试场景:在a目录下执行pip install -e .做可编辑安装,修改代码后不需要重新安装即可生效
    • Colab场景:直接执行pip install git+<你的私有GitHub仓库地址>,安装完成后即可直接通过from b.c import script1、from b.d import script3导入对应模块,不需要加a前缀,也不需要手动修改sys.path

方案2:通过工具配置自动添加Python路径

如果不想做成可安装包,可以针对不同场景做对应配置,不需要手动修改sys.path:

  • 单元测试场景(以pytest为例):在a目录下新建pytest.ini文件,添加如下配置,pytest运行时会自动将a目录加入sys.path
    [pytest]
    pythonpath = .
    
  • 本地运行脚本场景:不要直接用python script3.py运行脚本,改用模块方式执行python -m b.d.script3,Python会自动将当前工作目录(a目录)加入sys.path
  • Colab场景:克隆仓库后先将工作目录切换到a文件夹,再运行代码即可匹配Pycharm的运行逻辑

方案3:入口脚本动态注入搜索路径

如果不想修改全局配置,可以在所有入口脚本的最顶部添加动态获取项目根的代码,自动将a目录加入sys.path,不需要手动写死路径:

import sys
from pathlib import Path
# 按你的目录结构,script3.py所在路径为a/b/d/script3.py,向上找3层即可到a目录
project_root = Path(__file__).parent.parent.parent.resolve()
sys.path.insert(0, str(project_root))

该逻辑对所有运行场景生效,包括单元测试、Colab、本地运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:24:02