自定义Python包安装成功但导入报ModuleNotFoundError求助
排查Python包导入失败的原因
核心原因:顶层包名称误解
你的项目结构中,src目录下直接存放module、module2,而没有名为package_name的子目录。结合你的setup.py配置:
packages=find_packages('src'), package_dir={'': 'src'},
find_packages('src')会扫描src下的所有子包(即module、module2),最终安装到site-packages的是module/、module2/这两个独立顶层包,而非package_name作为父包。
如果你尝试执行import package_name,必然触发ModuleNotFoundError,正确的导入方式应为:
import module from module2.submodule import code3
其他排查方向
- 虚拟环境验证:执行
which python和which pip,确认当前使用的解释器和pip属于目标虚拟环境,避免全局环境和虚拟环境混淆。 - 导入缓存清理:删除项目目录和
site-packages中对应包的__pycache__目录,重启Python解释器后重试导入。 - 调整为带父包的结构(可选):若希望将
module、module2作为package_name的子包,需修改结构和配置:- 调整项目结构:
package_name src/ package_name/ __init__.py module/ __init__.py code.py module2/ __init__.py code2.py submodule/ __init__.py code3.py setup.py无需修改,此时find_packages('src')会找到package_name及其子包,安装后可通过import package_name.module导入。
- 调整项目结构:
- 安装完整性验证:执行
pip show -f package_name,查看Files列表,确认所有模块文件都被正确安装到site-packages的对应路径下。
内容的提问来源于stack exchange,提问作者julesj41
相关产品推荐
相关产品推荐

