pip freeze命令输出中的"pkg-resources==0.0.0"是什么意思?

219
当我运行pip freeze命令时,除了其他预期的软件包之外,我还会看到pkg-resources==0.0.0。我已经看到一些提到这个软件包的帖子(包括这个),但没有说明它是什么,或者为什么它被包含在pip freeze的输出中。我好奇想知道它是什么,也有一些情况下似乎会破坏使用pip freeze生成的requirements.txt文件安装软件包时出现pkg-resources==0.0.0这行(例如,当Travis CI通过pip安装依赖项并发现此行时)。 pkg-resources是什么,从requirements.txt中删除这一行是否可以?

更新:

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


@Jim,说得好。我添加了我遇到的例子。 - elethan
1
@Jim,我突然想到这可能与“virtualenv”有关,实际上,当我在virtualenv中时,我也看不到它。这仍然不能解释它是什么,但至少是我可以调查的一个线索。 - elethan
这是 https://dev59.com/t1kT5IYBdhLWcg3wKsWq#40167000?noredirect=1#comment67602638_40167000 的副本吗? - Craig Wright
1
可能是为什么pip freeze会列出"pkg-resources==0.0.0"?的重复问题。 - Louis
这几乎肯定是@CraigWright的ticket SO post的重复。请参见我在他的post上的评论。他们已经修复了Debian和Ubuntu安装的问题。 - Mike
显示剩余5条评论
3个回答

254
根据https://github.com/pypa/pip/issues/4022,这是Ubuntu向pip提供不正确的元数据导致的错误。因此,似乎没有充分的理由解释这种行为。我已向Ubuntu提交了后续错误报告。https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1635463 为了支持之前的答案,安全地从您的requirements.txt文件中删除该行应该是可行的。以下是一个示例Makefile段落,它可以安全地冻结您的包列表(将其放入您的Makefile中,并使用make freeze运行):
freeze:
    pip freeze | grep -v "pkg-resources" > requirements.txt

2022年7月6日更新:

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


17
不是Ubuntu特有的bug,Debian也有同样的问题。 - jellyfish
2
尝试部署到Heroku时仍然会引起头痛。 - Martins
4
这似乎仍然是Ubuntu 18.04的一个问题。 - Carmine Tambascia
3
在Ubuntu 19.04上,Python 3.8仍存在问题。 - eric.frederich
6
在Ubuntu 20.04上,Python 3.8的venv仍然存在问题。 - Pynchia
显示剩余3条评论

19

关于您的问题部分 "是否可以删除这行代码?":

我在 ubuntu 16.04 上开发时遇到了同样的问题,并且在要求中有那一行。当在运行 "pip install -r requirements.txt" 的 debian 8.5 上部署时,pip 抱怨 pkg-resources 找不到,但是已经全局安装了 "python-pkg-resources" ,所以该依赖项应该已满足。在 ubuntu 上也是如此:该软件包也存在。

正如这里所述,它似乎是某个“隐式安装的软件包”。

因此: 如果您正在拥有安装了python-pkg-resources的Debian/Ubuntu上,则可以安全地删除该行。 我这么做了,一切都运行良好。不过,由于我对此不是专家,您应该记住,在另一台机器上部署可能会造成麻烦。


谢谢提供的信息。我最终也将其删除了,也没有看到任何后果,但当然还是存在你提到的同样的注意事项。你也是在安装/卸载virtualenv吗? - elethan
是的,我尝试从虚拟环境内安装。由于系统范围内存在软件包,而我又不想弄乱事情,因此我没有尝试通过pip系统范围内进行安装。 - karlsebal

1

我在这个链接中找到了答案:pip freeze includes "pkg-resources==0.0.0",由Louis Bouchard(louis)在2019年11月16日的第10条评论中发布:

对我有用。但我不是专家,如果有人更好地理解它,最好解释一下。

值得一提的是,问题来自于虚拟环境的debian化版本,它使用了一个debundled版本的pkg_resource,该版本在创建时添加到虚拟环境中:

$ 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
$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接