无法导入自定义Python包:ModuleNotFoundError问题求助
Python包上传PyPI后导入报错的解决方法
问题分析
你遇到的导入错误主要源于两个问题:
- init.py导入路径错误:本地直接运行
__init__.py时,Python会将当前目录加入搜索路径,所以from starting_template import load_img能正常工作;但包安装后,模块属于opencv_auxiliary_for_vscode包的子模块,必须使用包内的相对/绝对导入路径才能被识别。 - setup.py可能未正确配置包内容:如果setup.py没有指定要打包的子模块,
starting_template.py可能未被包含到发布的包中。
修正步骤
1. 修复__init__.py的导入语句
将__init__.py中的代码修改为相对导入(推荐,不受包名变更影响):
from .starting_template import load_img print("loaded!")
或者使用绝对导入:
from opencv_auxiliary_for_vscode.starting_template import load_img print("loaded!")
2. 确保setup.py正确配置包内容
检查你的setup.py,确保包含packages参数,使用find_packages()自动识别所有子包和模块:
from setuptools import setup, find_packages setup( name="opencv_auxiliary_for_vscode", version="0.0.3", # 必须更新版本号,PyPI不允许重复上传同一版本 packages=find_packages(), # 其他可选配置:author、description、install_requires等 )
如果手动指定包,也可以写成packages=["opencv_auxiliary_for_vscode"],但find_packages()更灵活,适合后续扩展模块。
3. 重新构建并上传包
- 先清理旧的构建文件:删除
dist/、build/、opencv_auxiliary_for_vscode.egg-info/文件夹 - 重新构建包:
python setup.py sdist bdist_wheel - 用twine上传新版本:
twine upload dist/*
4. 测试导入
安装更新后的包,执行以下导入语句即可正常使用:
# 方式1:通过__init__.py导出的接口导入 from opencv_auxiliary_for_vscode import load_img # 方式2:直接从子模块导入 from opencv_auxiliary_for_vscode.starting_template import load_img
补充说明
本地测试包时,不要直接运行__init__.py脚本,应该在包含setup.py的基础文件夹下启动Python交互环境,再导入包,避免相对导入的脚本运行报错。
内容的提问来源于stack exchange,提问作者Tms91
相关产品推荐
相关产品推荐

