pip安装自制Python包时setup.py egg_info报错求助
问题排查与解决方案
核心原因
你的分发包里没有包含requirements.txt文件,导致pip安装时临时解压目录中找不到该文件,触发FileNotFoundError。即使你后来把依赖写进setup.py,若没有重新打包上传新版本,TestPyPI上依然是旧的包,安装时还是会执行旧的setup.py代码去读取requirements.txt。
分步解决
1. 确保依赖正确声明(二选一即可)
方案A:直接在setup.py中定义依赖(推荐)
放弃读取requirements.txt,直接用setuptools的install_requires字段声明依赖,这是Python包分发的标准方式,无需依赖额外文件:
from setuptools import setup import os here = os.path.abspath(os.path.dirname(__file__)) setup( name="mypackage", version="0.1.0", # ...其他必填字段(作者、描述等) install_requires=[ # 替换成你的实际依赖,比如: "requests>=2.31.0", "numpy>=1.26.0" ] )
方案B:让打包工具包含requirements.txt
如果坚持用requirements.txt,需要创建MANIFEST.in文件放在项目根目录,告诉setuptools打包时包含该文件:
# MANIFEST.in内容 include requirements.txt include README.md include LICENSE
2. 重新打包并上传新版本
修改后,必须重新生成分发包并上传到TestPyPI(注意版本号要更新,TestPyPI不允许重复上传同一版本):
# 清理旧的构建文件 rm -rf build dist mypackage.egg-info # 生成新的分发包 python setup.py sdist bdist_wheel # 用twine上传(推荐用twine而不是直接setup.py upload) twine upload --repository testpypi dist/*
3. 清理缓存并重新安装
避免pip使用本地缓存的旧包,先清理缓存再安装:
pip cache purge pip install -i https://test.pypi.org/simple/ mypackage==<你的新版本号>
额外注意
- 上传TestPyPI时,务必使用twine,它比
python setup.py upload更安全,且能确保包正确上传。 - 每次修改包内容后,必须更新版本号,否则TestPyPI会拒绝上传。
内容的提问来源于stack exchange,提问作者sato
相关产品推荐
相关产品推荐

