为啥 pip 冻结列表“pkg-resources==0.0.0”?
Posted
技术标签:
【中文标题】为啥 pip 冻结列表“pkg-resources==0.0.0”?【英文标题】:Why does pip freeze list "pkg-resources==0.0.0"?为什么 pip 冻结列表“pkg-resources==0.0.0”? 【发布时间】:2016-12-23 20:23:17 【问题描述】:在 Ubuntu 16.04 上使用 virtualenv 15.0.1 和 Python 3.5.2(均安装有 apt
)当我创建并激活新的 Python 虚拟环境时
virtualenv .virtualenvs/wtf -p $(which python3) --no-site-packages
source .virtualenvs/wtf/bin/activate
我得到以下输出:
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/das-g/.virtualenvs/wtf/bin/python3
Also creating executable in /home/das-g/.virtualenvs/wtf/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
确实 pip freeze --all
列出了这 4 个包:
pip==8.1.2
pkg-resources==0.0.0
setuptools==25.2.0
wheel==0.29.0
不过,我希望pip freeze
(没有--all
)忽略这些隐式安装的软件包。它确实省略了其中一些,但不是pkg-resources
:
pkg-resources==0.0.0
(顺便说一句,pip freeze --local
)
虽然这与帮助文本一致
$> pip freeze --help | grep '\--all'
--all Do not skip these packages in the output: pip, setuptools, distribute, wheel
在pip freeze
输出中包含pkg-resources
似乎不是很有用,甚至可能有害。 (我怀疑这就是为什么从pip-tools 运行pip-sync
会从虚拟环境中卸载pkg-resources,从而巧妙地破坏环境。)有什么好的理由为什么pip freeze
列出pkg-resources
而不是省略它,也?据我记得,它没有在 Ubuntu 14.04(使用 Python 3.4)上列出。
【问题讨论】:
我不知道为什么会发生这种情况。这发生在我身上,它使用了一个对我的项目实际上至关重要的不同包。我找到的解决方案是使用 PyPi 上的最新可用版本编辑 requirements.txt。我猜,一种可能是最初安装的版本在 PyPi 上不再可用。 令人惊讶的是还没有答案...... 我创建了一张票,它最终可能会提供答案:github.com/pypa/pip/issues/4022 bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1635463 Debian 错误报告#871790 也是关于这个问题的。 【参考方案1】:根据https://github.com/pypa/pip/issues/4022,这是由于 Ubuntu 向 pip 提供了不正确的元数据而导致的错误。所以,不,这种行为似乎没有充分的理由。我向 Ubuntu 提交了一个后续错误。 https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1635463
【讨论】:
这也会影响 Debian 用户。看起来修复是针对 Ubuntu see the most recent comment of original bug report 和 Debian (#1 #2)。【参考方案2】:我在虚拟环境中遇到了同样的问题。我用pip uninstall pkg-resources==0.0.0
删除了它
【讨论】:
警告:这可能会巧妙地破坏您的 virtualenv。 @das-g 它会以什么方式破坏 virtualenv? 对不起,我不太记得当时的问题是什么,而且我目前没有方便的 Ubuntu 系统。 IIRC,pkg-resources
是 virtualenv 的一个组成部分,Python、pip 或 virtualenv 本身需要它。不确定什么会在丢失时停止工作。【参考方案3】:
正如其他答案中提到的,这是一个错误。但是,在 linux 上,您可以使用以下命令自动删除包含 pkg-resources==0.0.0
的行。
$ pip freeze > requirements.in && grep -v "pkg-resources==0.0.0" requirements.in > temp && mv temp requirements.in
【讨论】:
以上是关于为啥 pip 冻结列表“pkg-resources==0.0.0”?的主要内容,如果未能解决你的问题,请参考以下文章
pip freeze 命令输出中的“pkg-resources==0.0.0”是啥