Co to jest „pkg-resources == 0.0.0” w danych wyjściowych polecenia pip freeze

157

Po uruchomieniu pip freezewidzę (między innymi oczekiwanymi pakietami) pkg-resources==0.0.0. Widziałem kilka postów wspominających o tym pakiecie (w tym o tym ), ale żaden z nich nie wyjaśniał, co to jest ani dlaczego jest uwzględniany w danych wyjściowych programu pip freeze. Głównym powodem, dla którego się zastanawiam, jest z ciekawości, ale wydaje się, że w niektórych przypadkach psuje to wszystko, gdy próbuję zainstalować pakiety z requirements.txtplikiem wygenerowanym za pomocą pip freezetego pkg-resources==0.0.0wiersza (na przykład, gdy Travis CI próbuje zainstalować zależności za pośrednictwem pipi znajduje to linia).

Co to jest pkg-resourcesi czy można usunąć tę linię z requirements.txt?

Aktualizacja:

Odkryłem, że ta linia wydaje się istnieć tylko w danych wyjściowych, pip freezegdy jestem w virtualenv. Nadal nie jestem pewien, co to jest lub co robi, ale zbadam dalej, wiedząc, że jest to prawdopodobnie powiązane virtualenv.

elethan
źródło
„wydaje się, że w niektórych przypadkach coś psuje, gdy próbujesz zainstalować pakiety z plikiem require.txt wygenerowanym przez pip freeze, który zawiera wiersz pkg-resources == 0.0.0”. . Czy możesz podać na to przykład?
Dimitris Fasarakis Hilliard
@Jim, słuszna uwaga. Dodałem przykład, na który wpadłem.
elethan
hm, jaka jest twoja wersja pip? Myślę, że mogło to być coś, czego przegapili w starym wydaniu, ponieważ 8.1.2nie mam wpisu pkg-resources. (Które nie powinno, ponieważ jestem prawie pewien, że pkg-resourcesjest z tym setuptools).
Dimitris Fasarakis Hilliard
1
@Jim to właśnie przyszło mi do głowy, że może to być związane virtualenv, a nawet, gdy jestem nie w virtualenv nie widzę go albo. To nadal nie wyjaśnia, co to jest, ale przynajmniej jest to wskazówka, którą mogę zbadać.
elethan

Odpowiedzi:

182

Według https://github.com/pypa/pip/issues/4022 jest to błąd wynikający z podania przez Ubuntu nieprawidłowych metadanych do pip. Więc nie, wydaje się, że nie ma dobrego powodu takiego zachowania. Złożyłem dalszy błąd w Ubuntu. https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1635463

Aby wykonać kopię zapasową poprzedniej odpowiedzi, powinno być bezpieczne usunięcie tego wiersza z pliku Requirements.txt. Oto przykład sekcji Make file, która bezpiecznie zamraża listę pakietów (upuść swój Makefile i uruchom z make freeze):

freeze:
    pip freeze | grep -v "pkg-resources" > requirements.txt
Craig Wright
źródło
9
To nie jest błąd specyficzny dla Ubuntu, debian ma ten sam problem
meduzy
1
Początkowo pomysł @MohammedShareefC wydawał się działać, ale potem się udało AttributeError: module 'pkg_resources' has no attribute 'iter_entry_points', więc myślę, że najlepiej go usunąć zrequirements.txt
arod
2
nadal powoduje ból głowy podczas próby wdrożenia na heroku
Martins
3
Wydaje się, że to nadal problem z ubuntu 18.04
Carmine Tambascia
3
Nadal problem z Pythonem 3.8 na Ubuntu 19.04
eric.frederich
13

Jeśli chodzi o część pytania „ czy można usunąć tę linię? ”:

Mam tutaj ten sam problem rozwijający się na Ubuntu 16.04 z tą samą linią w wymaganiach. Podczas wdrażania na uruchomionym Debianie 8.5"pip install -r requirements.txt" pip, narzeka, że ​​„nie znaleziono” pkg-resources, ale jest zainstalowany pakiet globalny „python-pkg-resources”, więc zależność powinna być spełniona. To samo dotyczy ubuntu: pakiet również tam istnieje.

Jak stwierdzono tutaj , wydaje się, że jest to jakiś „pakiet zainstalowany niejawnie”.

Tak więc: jeśli używasz Debiana / Ubuntu z zainstalowanymi zasobami python-pkg-resources, usunięcie tej linii powinno być bezpieczne . Zrobiłem to i wszystko działa dobrze. Ponieważ jednak nie jestem ekspertem w tej dziedzinie, należy pamiętać, że może to prowadzić do komplikacji podczas wdrażania na innym komputerze.

karlsebal
źródło
Dzięki za informację. Skończyło się na tym, że usunąłem go również i nie widziałem żadnych konsekwencji, ale oczywiście obowiązują te same zastrzeżenia, o których wspomniałeś. Gdzie również instalujesz do / z virtualenv?
elethan
Tak, próbowałem zainstalować z poziomu virtualenv. Ponieważ obecny jest pakiet dla całego systemu i nie chciałem zepsuć rzeczy, nie próbowałem instalować dla całego systemu.
karlsebal
1

znalazłem tę odpowiedź w tym linku: https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1635463

autor: Louis Bouchard (louis) napisane 16.11.2019:

U mnie to zadziałało. Ale ja nie jestem ekspertem, więc gdyby ktoś lepiej to zrozumiał, byłoby świetnie, gdyby to wyjaśnił.

Dzień dobry,

co jest warte, problem pochodzi z zdebianizowanej wersji virtualenv, która używa debundowanej wersji pkg_resource, która jest dodawana do virtualenv w czasie tworzenia:

$ 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

Korzystanie z zainstalowanej przez pip wersji virtualenv może być wykonalnym obejściem:

$ 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, ... Louis

panxogol
źródło
-2

W systemie Ubuntu możesz to naprawić, usuwając virtualenvpakiet Ubuntu i instalując nową wersję z pip:

sudo apt remove virtualenv
sudo pip install -U virtualenv
ahmed
źródło