pip freeze 命令输出中的“pkg-resources==0.0.0”是什么

新手上路,请多包涵

当我运行 pip freeze 我看到(在其他预期的包中) pkg-resources==0.0.0 。我看过一些提到这个包的帖子(包括 这个),但没有人解释它是什么,或者为什么它包含在 pip freeze 的输出中。我想知道的主要原因是出于好奇,而且,在某些情况下,当尝试使用 requirements.txt 生成的文件安装包时,它似乎会破坏一些东西 pip freeze 包括 pkg-resources==0.0.0 行(例如,当 Travis CI 尝试通过 pip 安装依赖项并找到此行时)。

什么是 pkg-resources ,是否可以从 requirements.txt 中删除这一行?

更新:

我发现当我在 virtualenv pip freeze 的输出中。我仍然不确定它是什么或它做了什么,但我会进一步调查知道它可能与 virtualenv 有关。

原文由 elethan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

根据 https://github.com/pypa/pip/issues/4022 ,这是由于 Ubuntu 向 pip 提供了不正确的元数据而导致的错误。所以,不,这种行为似乎没有充分的理由。我向 Ubuntu 提交了一个后续错误。 https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1635463

要备份以前的答案,从您的 requirements.txt 中删除该行应该是安全的。这是一个安全冻结包列表的 Make 文件节示例(放入 Makefile 并使用 make freeze 运行):

 freeze:
    pip freeze | grep -v "pkg-resources" > requirements.txt

编辑 2022 年 7 月 6 日:

我被告知包名称因使用的系统而异( pkg-resourcespkg_resources )。请参阅此答案所附的评论,了解不同版本的 Debian/Ubuntu 之间的用法差异。由于 pkg-resources 是相关系统发布时(将近 6 年前)历史上正确的包名称,因此在此答案中将保持不变。

原文由 Craig Wright 发布,翻译遵循 CC BY-SA 4.0 许可协议

至于你的问题部分“ 是否可以删除这一行? ”:

我在 ubuntu 16.04 上开发时遇到了同样的问题,要求非常符合要求。在运行 "pip install -r requirements.txt" 的 debian 8.5 上部署时 — pip 抱怨 pkg-resources 是“未找到”但是安装了一个全局包“python-pkg-resources”因此应该满足依赖关系。在 ubuntu 上也一样:包也存在于那里。

如此处所述 它似乎是一些“隐式安装的软件包”。

所以: 如果您使用的是安装了 python-pkg-resources 的 Debian/Ubuntu,删除该行应该是安全的。我这样做了,一切都运行良好。然而,由于我不是这方面的专家,你应该记住,这可能会导致在另一台机器上部署时出现复杂情况。

原文由 karlsebal 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题