Python包安装异常:用-e正常运行,无-e则报ModuleNotFoundError
问题解决方案
问题出在你的包结构和entry point配置不匹配,导致非 editable安装时Python找不到main模块:
核心原因
使用-e(可编辑模式)安装时,src目录会被直接加入Python的模块搜索路径,所以src下的main.py能被当作顶级模块导入;但非可编辑安装时,pip会按照你在setup.cfg里的配置打包并安装包,此时main.py并没有被注册为顶级模块,自然找不到。
修复步骤(推荐标准包结构)
1. 调整项目目录结构
把src下的文件放到一个和你的包名一致的子目录中(比如包名为project_name),结构变为:
. ├── pyproject.toml ├── README.md ├── requirements.txt ├── setup.cfg └── src └── project_name ├── __init__.py ├── main.py └── projectName.py
2. 更新setup.cfg配置
- 在
[options]段添加包路径配置,让setuptools正确识别你的包:
[options] packages = find: package_dir = = src
- 修正entry points,指向包内的
main模块:
[options.entry_points] console_scripts = project-name=project_name.main:main
备选方案(不调整目录结构)
如果不想修改目录结构,可以在setup.cfg的[options]段指定要安装的顶级模块:
[options] py_modules = main, projectName
这种方式适合单模块或简单多模块的小型包,但长期来看还是推荐标准的包目录结构,便于维护和扩展。
内容的提问来源于stack exchange,提问作者Enormax
相关产品推荐
相关产品推荐

