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

Posted

技术标签:

【中文标题】pip freeze 命令输出中的“pkg-resources==0.0.0”是啥【英文标题】:What is "pkg-resources==0.0.0" in output of pip freeze commandpip freeze 命令输出中的“pkg-resources==0.0.0”是什么 【发布时间】:2017-01-27 10:15:26 【问题描述】:

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

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

更新:

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

【问题讨论】:

“在某些情况下,当尝试使用 pip freeze 生成的包含 pkg-resources==0.0.0 行的 requirements.txt 文件安装软件包时,它似乎会破坏一些东西。”。你能举个例子吗? @Jim,说得好。我添加了我遇到的示例。 嗯,你的pip 是什么版本?我想这可能是他们在旧版本中错过的东西,因为在8.1.2 我没有pkg-resources 的条目。 (这不应该,因为我很确定pkg-resources 带有setuptools)。 @Jim 我突然想到它可能与virtualenv 有关,事实上,当我 not 在 vi​​rtualenv 中时,我也看不到它。这仍然无法解释它是什么,但至少是我可以调查的线索。 Why does pip freeze list "pkg-resources==0.0.0"?的可能重复 【参考方案1】:

至于您的问题“是否可以删除此行?”:

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

正如here 所说,它似乎是一些“隐式安装的包”。

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

【讨论】:

感谢您的信息。我最终也删除了它,也没有看到任何后果,但你提到的同样的警告当然适用。你在哪里安装到/从virtualenv 以及? 是的,我尝试从 virtualenv 内部安装。由于系统范围的软件包存在并且我不想把事情搞砸,我没有尝试在系统范围内按 pip 安装。【参考方案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

【讨论】:

不是 Ubuntu 特有的 bug,debian 也有同样的问题 尝试部署到heroku时仍然令人头疼 这似乎仍然是 ubuntu 18.04 的问题 Ubuntu 19.04 上的 Python 3.8 仍然存在问题 在 Ubuntu 20.04 上 Python 3.8 的 venv 仍然存在问题【参考方案3】:

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

作者:Louis Bouchard(路易斯)于 2019-11-16 写道:

它对我有用。但我不是专家所以,如果有人更好地理解它,如果解释它会很棒。

你好,

对于它的价值,问题来自于 virtualenv 的 debianized 版本,它使用了 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
$

【讨论】:

以上是关于pip freeze 命令输出中的“pkg-resources==0.0.0”是啥的主要内容,如果未能解决你的问题,请参考以下文章

pip install cx_Freeze 命令不起作用

`pip3 freeze` 在开头打印很多包

pip freeze vs pipreqs

pip freeze vs pipreqs

pip freeze vs pipreqs

powershell PIP-freeze.ps1