使用Pipenv从GitHub安装包时名称不一致报错咨询
问题根源与解答
核心原因
你遇到的报错本质是pip的egg参数值与包本身声明的元数据名称不匹配:
- 当使用
pipenv install -e安装可编辑包时,#egg=xxx是告诉pip你预期这个包的名称为xxx,但pip会自动校验这个名称是否和包源码里的元数据名称一致。 - 你目标仓库的包,在它的
setup.py(或pyproject.toml)里声明的包名是main,而非你以为的public-repo,所以当你指定egg=public_repo时,pip校验失败抛出错误;改成egg=main后,参数值和元数据名称匹配,安装自然成功。
为什么不能自定义任意名称
egg参数并不是让你自定义包名的,它的作用是给pip提供一个临时标识,但这个标识必须和包自身声明的名称一致——这是pip依赖管理的约束:
- 包的名称是由开发者在打包配置(
setup.py/pyproject.toml)里固定的,所有依赖这个包的工具都会基于这个名称识别它。 - 如果允许自定义任意名称,会导致依赖链混乱:比如你把包命名为
my-custom-name,但后续安装依赖这个包的其他库时,会找不到对应名称的包,进而引发依赖解析错误。
怎么确认包的真实名称
直接去目标GitHub仓库查看打包配置文件:
- 传统打包方式:看
setup.py里的name参数,比如setup(name="main", ...) - PEP 621新式打包:看
pyproject.toml里[project]下的name字段,比如name = "main"
内容的提问来源于stack exchange,提问作者Muzaffer
相关产品推荐
相关产品推荐

