Que signifie «pkg-resources == 0.0.0» dans la sortie de la commande pip freeze

157

Quand je cours, pip freezeje vois (parmi d'autres packages attendus) pkg-resources==0.0.0. J'ai vu quelques articles mentionnant ce package (y compris celui-ci ), mais aucun n'expliquait de quoi il s'agissait, ni pourquoi il est inclus dans la sortie de pip freeze. La principale raison pour laquelle je me demande est par curiosité, mais aussi, cela semble casser les choses dans certains cas lorsque vous essayez d'installer des packages avec un requirements.txtfichier généré avec pip freezequi inclut la pkg-resources==0.0.0ligne (par exemple, lorsque Travis CI tente d'installer des dépendances à travers pipet trouve ceci ligne).

Qu'est-ce que pkg-resources, et est-il possible de supprimer cette ligne requirements.txt?

Mettre à jour:

J'ai trouvé que cette ligne ne semble exister que dans la sortie de pip freezequand je suis dans un fichier virtualenv. Je ne suis toujours pas sûr de ce que c'est ou de ce qu'il fait, mais je vais enquêter plus avant en sachant qu'il est probablement lié à virtualenv.

éléthan
la source
"il semble casser les choses dans certains cas en essayant d'installer des paquets avec un fichier requirements.txt généré avec pip freeze qui inclut la ligne pkg-resources == 0.0.0." . Pouvez-vous peut-être en donner un exemple?
Dimitris Fasarakis Hilliard
@Jim, bon point. J'ai ajouté l'exemple que j'ai rencontré.
elethan le
hm, quelle est votre version de pip? Je pense que c'est peut-être quelque chose qu'ils ont manqué dans une ancienne version car 8.1.2je n'ai aucune entrée pour pkg-resources. (Ce qui ne devrait pas car je suis sûr que ça pkg-resourcesvient avec setuptools).
Dimitris Fasarakis Hilliard
1
@Jim, il m'est venu à l'esprit que cela pouvait être lié à virtualenv, et en effet, quand je ne suis pas dans une virtualenv, je ne le vois pas non plus. Cela n'explique toujours pas ce que c'est, mais c'est au moins un indice sur lequel je peux enquêter.
elethan le

Réponses:

182

Selon https://github.com/pypa/pip/issues/4022 , il s'agit d'un bogue résultant d'Ubuntu fournissant des métadonnées incorrectes à pip. Donc, non, il ne semble pas y avoir de bonne raison à ce comportement. J'ai déposé un bug de suivi avec Ubuntu. https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1635463

Pour sauvegarder la réponse précédente, il devrait être prudent de supprimer cette ligne de votre requirements.txt. Voici un exemple de strophe Make file qui fige en toute sécurité votre liste de paquets (déposez votre Makefile et exécutez avec make freeze):

freeze:
    pip freeze | grep -v "pkg-resources" > requirements.txt
Craig Wright
la source
9
Ce n'est pas un bogue spécifique à Ubuntu, Debian a le même problème
méduses
1
Au début, l'idée de @MohammedShareefC semblait fonctionner, mais ensuite je l'ai eue AttributeError: module 'pkg_resources' has no attribute 'iter_entry_points', alors je pense qu'il est préférable de la supprimer derequirements.txt
arod
2
causant toujours des maux de tête lors de la tentative de déploiement sur heroku
Martins
3
Cela semble toujours un problème avec ubuntu 18.04
Carmine Tambascia
3
Encore un problème avec Python 3.8 sur Ubuntu 19.04
eric.frederich
13

Quant à la partie de votre question " est-il possible de supprimer cette ligne? ":

J'ai le même problème ici en développement sur un ubuntu 16.04 avec cette même ligne dans les exigences. Lors du déploiement sur un debian 8.5 en cours d'exécution"pip install -r requirements.txt" pip en plaint que pkg-resources est "introuvable" mais qu'un paquet global est installé "python-pkg-resources" donc la dépendance doit être satisfaite. Idem sur ubuntu: le paquet existe également là-bas.

Comme indiqué ici, il semble s'agir d'un "package implicitement installé".

Donc: Si vous êtes sur un Debian / Ubuntu sur lequel python-pkg-resources est installé, il devrait être prudent de supprimer cette ligne . Je l'ai fait et tout va bien. Cependant, comme je ne suis pas un expert en la matière, vous devez garder à l'esprit que cela peut entraîner des complications lors du déploiement sur une autre machine.

Karlsebal
la source
Merci pour l'info. J'ai fini par le supprimer aussi et je n'ai vu aucune conséquence non plus, mais les mêmes mises en garde que vous mentionnez s'appliquent bien sûr. Où installez-vous aussi depuis / vers un virtualenv?
elethan le
Oui, j'ai essayé d'installer depuis un virtualenv. Comme le package à l'échelle du système est présent et que je ne voulais pas gâcher les choses, je n'ai pas essayé d'installer par pip dans tout le système.
karlsebal
1

trouvé cette réponse dans ce lien: https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1635463

par: Louis Bouchard (louis) a écrit le 16/11/2019:

Cela a fonctionné pour moi. Mais je ne suis pas un expert donc, si quelqu'un le comprend mieux, ce serait formidable s'il l'expliquait.

Bonjour,

pour ce que ça vaut, le problème vient de la version débianisée de virtualenv qui utilise une version dégroupée de pkg_resource qui est ajoutée au virtualenv au moment de la création:

$ 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

L'utilisation de la version pip installée de virtualenv peut être une solution de contournement possible:

$ 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
la source
-2

Sur Ubuntu, vous pouvez résoudre ce problème en supprimant le virtualenvpackage Ubuntu et en installant une nouvelle version à partir de pip:

sudo apt remove virtualenv
sudo pip install -U virtualenv
ahmed
la source