自定义PyPI包上传后出现Module Not Found Error问题求助
解决PyPI自定义包的Module Not Found Error问题
排查与解决步骤
1. 先确认包名和模块名的冲突问题
你猜的没错,包名和内部.py文件名/顶级目录名重复,确实是这类导入错误的常见诱因。
- 打开
setup.py或pyproject.toml,查看里面的name字段(这是你上传到PyPI的包名),确保它和包内的顶级目录(比如modelpg)或.py文件名不重名。比如包内有modelpg目录的话,PyPI包名可以改成modelpg-core这类差异化名称。
2. 检查目录结构与__init__.py的导入路径
从你提供的截图来看,重点核对这几点:
modelpg目录下必须有__init__.py(空文件也行),而且文件里的导入要用相对路径。比如要导入子模块Transformer,应该写:
别漏了前面的点号,不然Python会把它当成全局模块查找。from .Transformer import *- 再看
Transformer目录下的__init__.py,里面的导入同样要用相对路径,避免直接写import xxx这种绝对导入。
3. 清理本地安装,重新测试
本地开发目录和已安装的包很容易冲突,先彻底清理:
- 卸载已安装的包:
pip uninstall -y 你的包名 - 从PyPI重新安装:
pip install 你的包名 - 然后打开Python终端,用正确的路径导入,比如
import modelpg或者from modelpg import Transformer,别搞混层级。
4. 核对打包配置文件
确保setup.py或pyproject.toml里正确包含了所有模块:
- 如果用
setup.py,直接用find_packages()自动找所有包,避免手动配置遗漏:from setuptools import setup, find_packages setup( name="你的包名", packages=find_packages(), # 补充版本、作者、依赖等其他配置 ) - 如果用
pyproject.toml,要确保[tool.setuptools.packages]下配置了find = {},让工具自动发现所有包。
5. 本地预打包测试再上传
别直接上传PyPI,先本地打包验证没问题再操作:
- 生成wheel包:
python -m build - 创建一个虚拟环境,安装本地生成的wheel包:
pip install dist/你的包名-*.whl - 在虚拟环境中测试模块导入,确认没有报错后,再用Twine上传到PyPI。
内容的提问来源于stack exchange,提问作者Shivam Singh
相关产品推荐
相关产品推荐

