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

pip安装本地Python包后出现ModuleNotFoundError问题排查

问题根本原因

该报错由两处配置错误共同导致,pip安装提示成功不代表包可被Python正常识别:

  1. setup.py放置位置错误
    setup.py被直接放在了dummyLibrary包的源码目录内部,而非项目根目录。执行可编辑安装时,pip会为当前执行pip install -e .的目录创建egg链接,将该目录加入Python的包搜索路径;但Python导入dummyLibrary时,会在搜索路径下寻找名为dummyLibrary、内含__init__.py的子目录,而被链接的目录本身就是存放__init__.py的位置,不存在下一级dummyLibrary子文件夹,自然无法找到对应模块。
  2. setup.py缺失必要的包声明配置
    现有setup.py仅配置了包名和版本号,未添加packages参数告知打包工具需要安装的Python包路径。基于distutils打包时,如果不手动指定packages参数,工具不会自动扫描目录下的Python包,仅会为当前目录创建可编辑链接,不会处理实际的包导入逻辑。

pip的可编辑安装不会做完整的包结构校验,只要setup.py脚本本身能正常执行完成就会提示安装成功,不会校验待导入的模块路径是否真实存在,这就是两次安装均显示成功但实际无法导入的原因。


修复步骤

按以下顺序调整即可解决问题:

  • 调整目录结构,将setup.py移动到项目根目录(与application、dummyLibrary两个文件夹同级),调整后结构如下:
.
├── application
│   └── runner.py
├── dummyLibrary
│   ├── helperFunctions.py
│   └── __init__.py
└── setup.py
  • 修改setup.py内容,添加packages参数,明确声明要安装的包:
#!/usr/bin/env python
from distutils.core import setup

setup(
    name='dummyLibrary',
    version='0.0.1',
    packages=['dummyLibrary']
)
  • 修改dummyLibrary/__init__.py(当前为空文件),将需要对外暴露的函数导入包命名空间,否则即使包导入成功,调用foo()/bar()时也会触发属性不存在的报错:
from .helperFunctions import foo, bar
  • 先卸载之前错误安装的包版本,再在项目根目录(当前存放setup.py的目录)重新执行可编辑安装:
pip3 uninstall dummyLibrary -y
pip3 install -e .

操作完成后进入application目录执行python3 runner.py即可正常运行,不会再出现模块找不到的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:09:22