发布rolimons Python包后出现导入失败问题求助
问题描述
我遇到了Python包发布后导入错误的问题,具体情况如下:
项目结构
README.md LICENSE setup.py rolimons/ └── __init__.py └── users.py └── items.py └── client.py
setup.py 内容
from setuptools import find_packages, setup with open("README.md", encoding="utf-8") as f: readme = f.read() setup( name="rolimons", version="1.2.5", author="walker", description="Rolimons API Wrapper", long_description=readme, long_description_content_type="text/markdown", packages=['rolimons'], url="https://github.com/wa1ker38552/Rolimons-PY", install_requires=["requests", "bs4", "requests_html"], python_requires=">=3.7", )
发布步骤
- 修改setup.py中的版本号
- 执行
python setup.py sdist - 执行
twine upload --skip-existing dist/*
在另一个项目中执行pip install rolimons --upgrade后,出现导入错误,提示找不到该模块。
排查与解决方案
1. 检查打包是否包含完整模块
先确认生成的源码包是否包含rolimons目录下的所有文件:
- 打开dist目录下的
rolimons-1.2.5.tar.gz文件,查看内部是否存在完整的rolimons/目录,且包含__init__.py、users.py等所有文件。 - 如果文件缺失,说明打包过程未正确收集模块文件。
2. 修正setup.py的包收集配置
将setup.py中的packages=['rolimons']替换为find_packages(),让setuptools自动识别所有合法的Python包:
setup( # 保留其他原有参数 packages=find_packages(), # 保留其他原有参数 )
手动指定包名容易出现遗漏,find_packages()会自动扫描当前目录下所有包含__init__.py的目录作为包。
3. 重新打包并发布(避免跳过新版本)
旧的dist目录和--skip-existing参数可能导致新版本未上传成功,按以下步骤操作:
- 删除旧的dist目录:
Linux/macOS:rm -rf dist/
Windows:rmdir /s dist - 修改setup.py中的版本号(确保比已发布的版本更高)
- 重新生成源码包:
python setup.py sdist - 上传新版本:
twine upload dist/*
不要加--skip-existing,确保新版本被正常上传。
4. 验证安装环境与版本
在目标项目中执行以下命令确认安装情况:
- 查看安装的版本:
pip show rolimons,确认版本号为最新的1.2.5 - 查看安装路径:确认包安装在当前项目使用的Python环境(如虚拟环境)中,避免因为环境混用导致找不到模块。
补充:优化模块导入体验(可选)
如果希望用户能直接从rolimons包导入子模块内容,可以在rolimons/__init__.py中添加导入语句,例如:
from .users import UserClient from .items import ItemClient from .client import RolimonsClient
这一步不影响包的识别,只是提升用户使用体验。
内容的提问来源于stack exchange,提问作者walker
相关产品推荐
相关产品推荐

