从PyPI安装RunUp报ModuleNotFoundError但可编辑安装正常如何解决
问题根因
- 本地执行
pip install --editable .可编辑安装时,setuptools会自动把项目根目录加入Python模块搜索路径,所以src目录可以被正常识别,导入不会出错。 - 从PyPI直接安装正式包时,setuptools默认只会打包你显式声明要包含的Python包,你当前的配置既没有正确声明要打包
src下的runup模块,入口脚本的导入路径也写了src.runup.cli,但正式安装后src不会被加入模块搜索路径,就会抛出找不到src模块的报错。
修复方案
推荐采用更符合Python打包规范的方案1即可:
方案1:调整配置让runup直接作为顶层包
- 修改
setup.py配置,添加package_dir和修改packages参数,同时调整入口点的导入路径:
from setuptools import setup, find_packages setup( name="RunUp", # 其余原有配置项保持不变 packages=find_packages(where="src"), package_dir={"": "src"}, entry_points={ "console_scripts": [ "runup = runup.cli:cli", ] }, )
- 项目内部所有涉及导入
runup模块的代码,都去掉src.前缀,直接用from runup.xxx import xxx的格式即可。
方案2:保留src前缀的导入路径
如果一定要保留src前缀,需要先在src目录下新增空的__init__.py文件,再调整setup.py的packages参数:
packages=find_packages(), # 不需要配置package_dir参数
调整完成后重新构建打包上传到PyPI即可解决该问题。
内容的提问来源于stack exchange,提问作者Just a nice guy
相关产品推荐
相关产品推荐

