什么是&;pkg-resources==0.0.0"在输出PIP冻结命令

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

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

更新:

我发现这一行似乎只存在于pip freeze的输出中,当我在virtualenv中。我仍然不确定它是什么或它做什么,但我将进一步调查,知道它可能与virtualenv有关。

81082 次浏览

至于你的问题“可以去掉这条线吗?”的部分:

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

正如在这里所述,它似乎是一些“隐式安装的包”。

所以:如果你在Debian/Ubuntu上安装了python- ppg -resources,删除这一行应该是安全的。我这样做了,一切都很好。然而,由于我不是这方面的专家,您应该记住,在另一台机器上部署时,这可能会导致并发症。

根据https://github.com/pypa/pip/issues/4022,这是由于Ubuntu向pip提供了不正确的元数据而导致的错误。所以,这种行为似乎没有一个很好的理由。我提交了Ubuntu的后续bug。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-resources vs pkg_resources)。关于不同版本的Debian/Ubuntu在使用上的差异,请参阅附在这个答案后面的评论。由于pkg-resources是在这篇文章发布时(大约6年前)有关系统的历史正确包名,因此在这个答案中它将保持不变。

在这个链接中找到了答案:https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1635463

作者:路易斯·布沙尔(Louis Bouchard)于2019年11月16日写道:

这对我很管用。但是Iḿ不是专家,所以,如果有人更好地理解它,如果能解释它就太好了。

你好,

不管怎样,问题来自于virtualenv的去编码器版本,它使用了pkg_resource的去编码器版本,在创建时添加到virtualenv中:

$ virtualenv .
Running virtualenv with interpreter /usr/bin/python2
New python executable in /home/caribou/git/quividi/test/bin/python2
Also creating executable in /home/caribou/git/quividi/test/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
$ pip freeze
pkg-resources==0.0.0

使用pip安装版本的virtualenv可以是一个可行的解决方案:

$ sudo apt -y purge python3-virtualenv virtualenv tox
$ pip install virtualenv
$ virtualenv .
pip install virtualenv
Collecting virtualenv
Downloading https://files.pythonhosted.org/packages/c5/97/00dd42a0fc41e9016b23f07ec7f657f636cb672fad9cf72b80f8f65c6a46/virtualenv-16.7.7-py2.py3-none-any.whl (3.4MB)
100% |████████████████████████████████| 3.4MB 351kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.7.7
$ virtualenv .
New python executable in /home/caribou/git/quividi/test/bin/python
Installing setuptools, pip, wheel...
done.
$ source bin/activate
$ pip freeze
$