Virtualenv: Setuptools v45.0.0 casse virtualenv sur Python 2

CrĂ©Ă© le 12 janv. 2020  Â·  18Commentaires  Â·  Source: pypa/virtualenv

Avant -


Tous mes scripts de création d'environnement virtuel automatisé sur Python 2 ont commencé à se briser aujourd'hui.

Voici un exemple:

$ py -2.7-32 -m virtualenv foo


UnsupportedPythonVersion: Package 'setuptools' requires a different Python: 2.7.8 not in '>=3.5'


OSError: Command 
\Scripts\python.exe - setuptools pip wheel failed with error code 1

Cela semble ĂȘtre causĂ© par la sortie de setuptools v45.0.0 hier :

v45.0.0 : 11 janvier 2020

1458 : Abandon de la prise en charge de Python 2. Les outils de configuration nécessitent désormais Python 3.5 ou une version ultérieure. Installez setuptools en utilisant pip >=9 ou pin to Setuptools <45 pour maintenir la prise en charge de 2.7.
1959 : correctif pour Python 4 : remplacez unsafe six.PY3 par six.PY2

https://setuptools.readthedocs.io/en/latest/history.html#v45 -0-0

Il semble que, par dĂ©faut, virtualenv essaie d'installer les derniers outils de configuration et que pip install setuptools rĂ©cupĂšre setuptools>=45.0.0 mĂȘme si ces versions ne prennent pas en charge Python 2.

Pour contourner ce problÚme, j'utilise maintenant les commandes suivantes :

$ py -2.7-32 -m virtualenv --no-setuptools foo
$ foo\Scripts\python -m pip install "setuptools<45"

Je n'exporte pas dans un emballage Python, mais je m'attendrais setuptools>=45 ce que pip install setuptools le dĂ©tecterait automatiquement et l'Ă©viterait, mais ceci ne semble pas ĂȘtre le cas.

Si ce n'est pas possible, peut-ĂȘtre que les versions de virtualenv pour Python 2 devraient Ă©viter setuptools>=45 ?

Commentaire le plus utile

Ce qui suit a fonctionné pour moi de sortir de ce problÚme.

pip install --upgrade 'setuptools<45.0.0'

Tous les 18 commentaires

Je confirme que c'est un problÚme majeur. Dans OpenStack, la plupart des portes sont cassées à cause de cela. Voir : http://lists.openstack.org/pipermail/openstack-discuss/2020-January/011956.html

Merci pour le signalement, /me en retard d'une demi-heure - je pensais que virtualenv utiliserait le résolveur moderne du pip, mais ce n'est apparemment pas le cas.

DĂ©jĂ  suivi dans setuptools pour un autre en aval https://github.com/pypa/setuptools/issues/1963

Vous ne savez pas pourquoi setuptools 45+ est récupéré, virtualenvs bootstrap devrait le garder 44 pour setuptools. ??

Voici le retraçage : http://paste.openstack.org/show/788301/

legacy_resolve ressemble Ă  quelque chose qui rejetterait les nouvelles rĂšgles.

Non, mauvaise piste à explorer, raw pip ignore également la contrainte de version py (bien qu'il soit annoncé comme fonctionnel): http://paste.openstack.org/show/788302/

Je vais regarder et publier un correctif demain. Si quelqu'un a le temps de faire un pr avant cela pourrait aider.

@yoctozepto ne semble pas pouvoir reproduire votre échec ; pouvez-vous nous donner le journal de création complet avec une triple verbosité ?

@gaborbernat S'il s'agit du mĂȘme problĂšme que pypa/pip#7586, cela peut ĂȘtre un bogue dans l' un des miroirs PyPA que @yoctozepto utilise .

Apparemment, l'un d'entre eux ne propage pas correctement les informations python_requires .

Si c'est le cas, alors c'est un bogue pour ce miroir ; rien a voir avec nous

Ce qui suit a fonctionné pour moi de sortir de ce problÚme.

pip install --upgrade 'setuptools<45.0.0'

Je travaille sur un projet qui utilise toujours python 2.7 :(, et j'ai eu le mĂȘme problĂšme.
Mais, en utilisant la commande ci-dessus (par ikrambabai), cela a fonctionnĂ© Ă  nouveau !! :RÉ
Merci!

Cependant, cela reste essentiel lors de la création d'un nouvel environnement virtuel pour python 2.7, car virtualenv téléchargerait setuptools-45.0.0 , et aucune mise à niveau (rétrogradation via pip avec pip install --upgrade 'setuptools<45.0.0' ) ne le supprimerait réellement . La seule solution est de télécharger la roue manuellement.

Cependant, cela reste essentiel lors de la création d'un nouvel environnement virtuel pour python 2.7, car virtualenv téléchargerait setuptools-45.0.0 , et aucune mise à niveau (rétrogradation via pip avec pip install --upgrade 'setuptools<45.0.0' ) ne le supprimerait réellement . La seule solution est de télécharger la roue manuellement.

Cela ne devrait se produire que si vous ĂȘtes derriĂšre un serveur d'index qui ne propage pas python-requires... je vous recommande donc de rĂ©parer le serveur d'index.

@gaborbernat pas à ma connaissance. Y a-t-il un moyen pour moi de le vérifier?

Je peux voir que pythonhosted.org est utilisé lors du téléchargement des packages lors de la création du virtualenv :

Installing setuptools, pkg_resources, pip, wheel...
  Running command /opt/llenv22/bin/python2.7 - setuptools pkg_resources pip wheel
  Collecting setuptools
    Using cached https://files.pythonhosted.org/packages/af/e7/02db816dc88c598281bacebbb7ccf2c9f1a6164942e88f1a0fded8643659/setuptools-45.0.0-py2.py3-none-any.whl
  Collecting pkg_resources
  Collecting pip
    Using cached https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl
  Collecting wheel
    Using cached https://files.pythonhosted.org/packages/00/83/b4a77d044e78ad1a45610eb88f745be2fd2c6d658f9798a15e384b7d57c9/wheel-0.33.6-py2.py3-none-any.whl

Passez les drapeaux -v pour pip install setuptools -vvv ?

Cela fonctionne et la bonne version est installée :

Collecting setuptools
  Created temporary directory: /tmp/pip-unpack-zJMfUH
  Starting new HTTPS connection (1): files.pythonhosted.org:443
  https://files.pythonhosted.org:443 "GET /packages/f9/d3/955738b20d3832dfa3cd3d9b07e29a8162edb480bf988332f5e6e48ca444/setuptools-44.0.0-py2.py3-none-any.whl HTTP/1.1" 200 583230
  Downloading setuptools-44.0.0-py2.py3-none-any.whl (583 kB)
     |████████████████████████████████| 583 kB 3.3 MB/s
  Added setuptools from https://files.pythonhosted.org/packages/f9/d3/955738b20d3832dfa3cd3d9b07e29a8162edb480bf988332f5e6e48ca444/setuptools-44.0.0-py2.py3-none-any.whl#sha256=180081a244d0888b0065e18206950d603f6550721bd6f8c0a10221ed467dd78e to build tracker '/tmp/pip-req-tracker-OTDORt'
  Removed setuptools from https://files.pythonhosted.org/packages/f9/d3/955738b20d3832dfa3cd3d9b07e29a8162edb480bf988332f5e6e48ca444/setuptools-44.0.0-py2.py3-none-any.whl#sha256=180081a244d0888b0065e18206950d603f6550721bd6f8c0a10221ed467dd78e from build tracker '/tmp/pip-req-tracker-OTDORt'
Installing collected packages: setuptools
  Created temporary directory: /tmp/pip-unpacked-wheel-vDEYe

Le problÚme ne se pose que lors de la création de l'environnement virtuel.

@ostefano C'était pareil pour moi. J'ai contourné cela en installant setuptools explicitement :

$ py -2.7-32 -m virtualenv --no-setuptools foo
$ foo\Scripts\python -m pip install "setuptools<45"

Nous avons rencontrĂ© le mĂȘme problĂšme : https://github.com/mozilla-services/syncserver/issues/239
J'ai d'abord pensĂ© que pythonhosted.org ne respectait pas le drapeau Requires-Python mais avec le mĂȘme miroir, cela fonctionnait sur Debian Stretch avec Python 2.7.13 alors qu'il Ă©chouait sur Ubuntu Xenial avec Python 2.7.12, sinon des configurations systĂšme assez propres, mĂȘme testĂ© dans un environnement Docker. La version Python ne peut pas ĂȘtre la raison car le mĂȘme problĂšme a dĂ©jĂ  Ă©tĂ© signalĂ© avec Ubuntu Bionic et Python 2.7.17.

Donc, je suis perplexe oĂč/Ă  quel niveau le bogue doit ĂȘtre recherchĂ©, Python, virtualenv, pip, pythonhosted.org ou y a-t-il quelque chose au milieu ?
La solution de contournement est claire, mais ce serait formidable d'enquĂȘter et de corriger la raison pour laquelle setuptools 45 est extrait en premier lieu.

Cette page vous a été utile?
0 / 5 - 0 notes