当我运行pip freeze
时,我看到(在其他预期的包中)pkg-resources==0.0.0
。我看过一些文章提到这个包(包括this one),但没有解释它是什么,或者为什么它包含在pip freeze
的输出中。我想知道的主要原因是出于好奇,但在某些情况下,当试图安装包含pkg-resources==0.0.0
行的pip freeze
生成的requirements.txt
文件时,它似乎会破坏一些东西(例如,当Travis CI试图通过pip
安装依赖项并找到此行时)。
什么是pkg-resources
,是否可以从requirements.txt
中删除这一行?
更新:
我发现这一行似乎只存在于pip freeze
的输出中,当我在virtualenv
中时。我仍然不确定它是什么或它做什么,但我会进一步调查,知道它可能与virtualenv
有关。
3条答案
按热度按时间bt1cpqcv1#
根据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
运行):我被告知,软件包名称因使用的系统而异(
pkg-resources
vspkg_resources
)。请参阅此答案所附的注解,了解不同版本Debian/Ubuntu之间的使用差异。由于pkg-resources
在发布时(大约6年前)是有问题的系统的历史正确的软件包名称,因此在此答案中将保持不变。eimct9ow2#
至于你的问题“删除这条线可以吗?”":
我在ubuntu16.04上开发时遇到了同样的问题,需求中就有这一行。当在运行
"pip install -r requirements.txt"
的debian 8.5上部署时,pip会抱怨pkg-resources“找不到”,但是已经安装了一个全局软件包“python-pkg-resources”,所以应该满足依赖关系。在ubuntu上:包也在那里。正如here所述,它似乎是一些“隐式安装的软件包”。
所以:如果你在Debian/Ubuntu上安装了python-pkg-resources,那么删除这一行应该是安全的。我这样做了,一切都很好。但是,由于我不是这方面的Maven,因此您应该记住,在另一台机器上部署时,这可能会导致并发症。
gkn4icbw3#
我在这个链接中找到了答案:pip freeze includes "pkg-resources==0.0.0" in comment 10 by:Louis Bouchard(路易斯)发布:2019-11-16:
对我很有效。但我不是一个Maven,所以,如果有人更好地理解它,如果解释一下就好了。
值得注意的是,问题来自virtualenv的debianized版本,它使用了在创建时添加到virtualenv中的
pkg_resource
的解捆绑版本:使用pip安装的virtualenv版本可能是一个可行的解决方案: