Prólogo : Estoy bastante familiarizado con toda la fecha límite del 1 de enero de 2020 y estoy en el proceso de eliminar Python 2 en todos mis proyectos, pero esta sorpresa de setuptools es bastante inconveniente de todos modos. Si eliges no arreglar esto, no juzgaré a nadie, pero por favor no me sermonees acerca de que Python 2 está obsoleto :-)
Todos mis scripts de creación de entornos virtuales automatizados en Python 2 comenzaron a fallar hoy.
Aquí hay un ejemplo:
$ 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
Esto parece deberse al lanzamiento de setuptools
v45.0.0 ayer:
v45.0.0: 11 de enero de 2020
1458: Drop support para Python 2. Setuptools ahora requiere Python 3.5 o posterior. Instale setuptools usando pip> = 9 o pin a Setuptools <45 para mantener la compatibilidad con 2.7.
1959: Arreglo para Python 4: reemplace el inseguro six.PY3 por six.PY2https://setuptools.readthedocs.io/en/latest/history.html#v45 -0-0
Parece que, de forma predeterminada, virtualenv
intenta instalar las últimas herramientas de configuración y que pip install setuptools
recoge setuptools>=45.0.0
aunque estas versiones no sean compatibles con Python 2.
Como solución alternativa, ahora estoy usando los siguientes comandos:
$ py -2.7-32 -m virtualenv --no-setuptools foo
$ foo\Scripts\python -m pip install "setuptools<45"
No exporto en el empaquetado de Python, pero esperaría que setuptools>=45
declare que no es compatible con Python 2 en sus metadatos de distribución y que pip install setuptools
lo detectaría automáticamente y lo evitaría, pero esto no parece ser el caso.
Si eso no es posible, tal vez las versiones de virtualenv
para Python 2 deberían evitar setuptools>=45
?
Confirmo que este es un problema importante. En OpenStack, la mayoría de las puertas están rotas debido a esto. Ver: http://lists.openstack.org/pipermail/openstack-discuss/2020-January/011956.html
Gracias por informar, / me retrasé media hora; pensé que virtualenv usaría el solucionador moderno de pip, pero aparentemente no lo hace.
Ya se ha rastreado en setuptools para otro flujo descendente https://github.com/pypa/setuptools/issues/1963
No estoy seguro de por qué se recogen setuptools 45+, virtualenvs bootstrap debería mantenerlo 44 para setuptools. 🤔
Aquí está el rastreo: http://paste.openstack.org/show/788301/
legacy_resolve suena como algo que descartaría las nuevas reglas.
No, una vía incorrecta para explorar, el pip sin procesar también ignora la restricción de la versión py (a pesar de que se anuncia que funciona): http://paste.openstack.org/show/788302/
Echaré un vistazo y publicaré una solución mañana. Si alguien tiene tiempo para hacer un anuncio antes, eso ayudaría.
@yoctozepto parece que no puede replicar su falla; ¿Puede darnos el registro de creación completo con triple verbosidad?
@gaborbernat Si es el mismo problema que pypa / pip # 7586, entonces esto puede ser un error en uno de los espejos de PyPA que .
Aparentemente, uno de ellos no está propagando correctamente la información python_requires
.
Si es así, entonces este es un error para ese espejo; nada que ver con nosotros mismos 🤷♂
Lo siguiente me funcionó para salir de este problema.
pip install --upgrade 'setuptools <45.0.0'
Estoy trabajando con un proyecto que todavía usa python 2.7 :(, y tuve el mismo problema.
Pero, usando el comando anterior (por ikrambabai), ¡funcionó de nuevo! :D
¡Gracias!
Sin embargo, esto sigue siendo crítico al crear un nuevo entorno virtual para python 2.7, ya que virtualenv
descargaría setuptools-45.0.0
, y ninguna actualización (degradar a través de pip con pip install --upgrade 'setuptools<45.0.0'
) en realidad lo eliminaría . La única solución es descargar la rueda manualmente.
Sin embargo, esto sigue siendo crítico al crear un nuevo entorno virtual para python 2.7, ya que
virtualenv
descargaríasetuptools-45.0.0
, y ninguna actualización (degradar a través de pip conpip install --upgrade 'setuptools<45.0.0'
) en realidad lo eliminaría . La única solución es descargar la rueda manualmente.
Esto solo debería suceder si está detrás de un servidor de índices que no propaga requisitos de python ... así que recomiendo arreglar el servidor de índices.
@gaborbernat no que yo sepa. ¿Hay alguna forma de comprobarlo?
Puedo ver que pythonhosted.org se usa al descargar los paquetes al crear el 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
Pase las banderas -v por pip install setuptools -vvv
?
Eso funciona y la versión correcta está instalada:
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
El problema surge solo al crear el entorno virtual.
@ostefano A mí me pasó lo mismo. Trabajé alrededor de esto instalando setuptools
explícitamente:
$ py -2.7-32 -m virtualenv --no-setuptools foo
$ foo\Scripts\python -m pip install "setuptools<45"
Nos enfrentamos al mismo problema: https://github.com/mozilla-services/syncserver/issues/239
Primero pensé que pythonhosted.org no respeta la bandera Requires-Python
pero con el mismo espejo funciona en Debian Stretch con Python 2.7.13 mientras falla en Ubuntu Xenial con Python 2.7.12, de lo contrario, configuraciones de sistema bastante limpias, incluso probado en un entorno Docker. La versión de Python no puede ser la razón, ya que ya se informó el mismo problema con Ubuntu Bionic y Python 2.7.17.
Entonces, estoy desconcertado dónde / en qué nivel se debe buscar el error, Python, virtualenv, pip, pythonhosted.org o ¿hay algo en el medio?
La solución es clara, pero sería genial investigar y corregir la razón por la que setuptools 45 se extrae en primer lugar.
Comentario más útil
Lo siguiente me funcionó para salir de este problema.
pip install --upgrade 'setuptools <45.0.0'