Что такое «pkg-resources == 0.0.0» в выводе команды pip freeze

157

Когда я бегу, pip freezeя вижу (среди других ожидаемых пакетов) pkg-resources==0.0.0. Я видел несколько постов, в которых упоминается этот пакет (включая этот ), но ни один из них не объясняет, что это такое и почему он включен в вывод pip freeze. Основная причина, по которой меня интересует, это из любопытства, но в некоторых случаях, кажется, что-то ломается при попытке установить пакеты с requirements.txtфайлом, созданным с pip freezeвключением pkg-resources==0.0.0строки (например, когда Travis CI пытается установить зависимости через pipи находит это линия).

Что pkg-resourcesи можно ли удалить эту строку requirements.txt?

Обновить:

Я обнаружил, что эта строка существует только в выводе, pip freezeкогда я нахожусь в virtualenv. Я все еще не уверен, что это такое или что он делает, но я буду продолжать расследование, зная, что это, вероятно, связано с virtualenv.

elethan
источник
«в некоторых случаях кажется, что что-то не работает, когда вы пытаетесь установить пакеты с файлом require.txt, сгенерированным с помощью pip freeze, который содержит строку pkg-resources == 0.0.0». , Можете ли вы привести пример для этого?
Димитрис Фасаракис Хиллиард
@ Джим, хорошая мысль. Я добавил пример, с которым столкнулся.
1916 года
хм, какая у тебя версия pip? Я думаю , это мощь было то , что они пропустили в старом выпуске , так как в у 8.1.2меня нет записи для pkg-resources. (Что не следует, так как я уверен, что pkg-resourcesидет с setuptools).
Димитрис Фасаракис Хиллиард
1
@ Джим, мне только что пришло в голову, что это может быть связано virtualenv, и действительно, когда я не нахожусь в виртуальности, я тоже не вижу этого. Это все еще не объясняет, что это такое, но по крайней мере является ключом, который я могу исследовать.
1916 года

Ответы:

183

Согласно https://github.com/pypa/pip/issues/4022 , это ошибка, связанная с тем, что Ubuntu предоставляет неверные метаданные для pip. Так что нет, похоже, нет веских причин для такого поведения. Я отправил дополнительную ошибку в Ubuntu. https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1635463

Чтобы сделать резервную копию предыдущего ответа, следует безопасно удалить эту строку из вашего файла require.txt. Вот пример раздела Make file, который безопасно замораживает ваш список пакетов (поместите ваш Makefile и запустите с ним make freeze):

freeze:
    pip freeze | grep -v "pkg-resources" > requirements.txt
Крейг Райт
источник
9
Это не специфичная для Ubuntu ошибка, у debian та же проблема
медуза
1
Сначала идея @MohammedShareefC, казалось, работала, но потом я получил AttributeError: module 'pkg_resources' has no attribute 'iter_entry_points', поэтому я думаю, что лучше всего просто удалить ее изrequirements.txt
возникла
2
все еще вызывает головную боль при попытке развернуться к героку
Мартинс
3
Это кажется все еще проблемой с Ubuntu 18.04
Carmine Tambascia
3
Все еще проблема с Python 3.8 в Ubuntu 19.04
eric.frederich
13

Что касается части вашего вопроса " это нормально, чтобы удалить эту строку? ":

У меня та же проблема, которая возникает при разработке Ubuntu 16.04 с той же самой строчкой в ​​требованиях. При развертывании на Debian 8.5 работающий "pip install -r requirements.txt"pip жалуется, что pkg-resources "не найден", но установлен глобальный пакет "python-pkg-resources", поэтому зависимость должна быть удовлетворена. То же самое и в Ubuntu: там тоже есть пакет.

Как указано здесь, это, кажется, какой-то «неявно установленный пакет».

Итак: Если вы работаете в Debian / Ubuntu с установленными python-pkg-resources, удалить эту строку безопасно . Я так и сделал, и все работает нормально. Однако, поскольку я не специалист по этому вопросу, вы должны помнить, что это может привести к осложнениям при развертывании на другой машине.

karlsebal
источник
Спасибо за информацию. Я также удалил его и не увидел никаких последствий, но те же предостережения, которые вы упомянули, применимы, конечно. Где вы устанавливаете в / из virtualenv?
одиннадцатое
Да, я попытался установить изнутри virtualenv. Поскольку общесистемный пакет присутствует, и я не хотел все испортить, я не пытался установить его по всей системе.
Карлсебаль
1

нашел этот ответ по этой ссылке: https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1635463

автор: Луи Бушар (Луис) написал на 2019-11-16:

Это сработало для меня. Но я не эксперт, поэтому, если кто-то поймет это лучше, было бы здорово, если бы это объяснили.

Привет,

для чего бы это ни стоило, проблема исходит от дебианизированной версии 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
$

hth, ... Луи

panxogol
источник
-2

В Ubuntu вы можете исправить это, удалив virtualenvпакет Ubuntu и установив новую версию из pip:

sudo apt remove virtualenv
sudo pip install -U virtualenv
Ahmed
источник