You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 22:05:24