¿Qué indica “error: option - single-version-externally-managed not Recognized”?

102

Parece que de repente comencé a encontrar el error error: option --single-version-externally-managed not recognizedal pip installingresar paquetes de variantes (incluidos PyObjCy astropy). Nunca había visto este error antes, pero ahora también aparece en compilaciones de travis-ci para las que nada ha cambiado.

¿Este error indica una distribución desactualizada? ¿O alguna opción especificada incorrectamente en setup.py? ¿O algo completamente diferente?

keflavich
fuente

Respuestas:

84

Nueva actualización:

Instale la última versión de setuptools. Si sigue apareciendo el error, instale wheeltambién.

pip install -U setuptools
pip install -U wheel

Respuesta original / Más detalles:

--single-version-externally-managed es una opción utilizada para paquetes de Python que indica al módulo setuptools que cree un paquete de Python que puede ser administrado fácilmente por el administrador de paquetes del host si es necesario, como Yum o Apt.

Si ve este mensaje, es posible que tenga una versión anterior de setuptools o Python. Intente usar Distribute, que es una versión más reciente de setuptools y es compatible con versiones anteriores. Estos paquetes pueden esperar que ya los tenga.

https://pypi.python.org/pypi/distribute

Editar: en este punto, distribuir se ha fusionado en el setuptoolsproyecto principal . Simplemente instale la última versión de setuptools. Como indicó @wynemo, es posible que desee utilizar la --eggopción en su lugar, ya que es más apropiada para aquellos que realizan instalaciones manuales donde no tiene la intención de crear un paquete de sistema para la distribución.

Kelketek
fuente
1
¿Puedes agregar en qué versión apareció? Estoy usando setuptools 0.6 y pip no conoce una versión más nueva. distributesuena bien, pero no puedo importarlo ...
keflavich
No lo hace import distribute. Distribute es un reemplazo directo y tiene el mismo nombre de módulo. import setuptoolses necesario para ello también.
Kelketek
Lo que debe hacer, entonces, es asegurarse de que setuptools no anule la distribución, si tiene ambos instalados. Debe instalar distribuir con pip y luego eliminar setuptools. Imagino que debería funcionar.
Kelketek
17
Debe agregarse: No use más distribuir. Distribute se ha fusionado de nuevo con el proyecto setuptools, por lo que ahora solo hay uno setuptoolspara gobernarlos a todos.
Iguananaut
1
@johntex, esta respuesta se hizo hace más de un año, cuando las herramientas de distribución y configuración aún no se habían fusionado (o si lo habían hecho, no había oído hablar de ello). Lo he actualizado ahora.
Kelketek
136

Agregar --eggopción

pip install --egg SCons

Yo uso la pipversión 1.4.1

Wynemo
fuente
10
Esa fue la única solución que realmente ayudó. Ya se instalaron pip y setuptools recientes, sin embargo, tengo este error.
Michael
Tuve este problema con pyenv y esto lo solucionó.
glaucon
13
¿Alguien puede explicar en detalle qué significa esta opción y por qué funciona?
kawing-chiu
4
Si bien esto funcionó para mí, también recibí el error: "DEPRECATION: --egg ha quedado obsoleto y se eliminará en el futuro. Esta bandera es mutuamente excluyente con grandes partes de pip, y su uso invalida la capacidad de pip para administrar el proceso de instalación."
natersoz
2
no such option: --eggen pip 18.1
gdw2
45

Instalando wheel resolvió este problema con reciente pip(usé 8.1.2):

pip install wheel
Seth Difley
fuente
Puede volver a editar si lo desea, no hay problema. Si conoce la versión exacta de pipy wheeldónde se corrigió, puede que valga la pena mencionarlo en caso de que vuelva a romperse. Y además, la respuesta no explica qué está pasando de todos modos.
anatoly techtonik
Esta respuesta adicional de @sparrowt solucionó mi problema
David Poxon
7

Intente actualizar las herramientas de configuración como esta:

pip install --upgrade setuptools

gorrión
fuente
5

Estaba teniendo este problema. Resultó que era un problema con los permisos de archivo en mi caché pip.

Si ve un mensaje al principio de su salida pip como

The directory '/home/ubuntu/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/ubuntu/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

es posible que tenga el mismo problema. Puede resolverlo asegurándose de tener los permisos de archivo adecuados en su caché de pip (algo así como chown -R $(whoami) /home/ubuntu/.cache/pip) o, si está en un UNIX, puede establecer la ubicación de la caché de pip con XDG_CACHE_HOMEenv var en alguna carpeta de su propiedad.

sans
fuente
Sorprendentemente, a mí también me funcionó (si lo usas sudopara instalar el paquete, ¡asegúrate de agregar la -Hbandera)! Realmente no veo cuál es la conexión entre el caché y el error de opción de comando, pero no importa.
Delgan
1

Probé las soluciones anteriores. Sin embargo, solo puedo resolver el problema hasta que lo haga:

sudo pip3 install -U pip (para python3)

Karim
fuente
0

También tengo este problema en mi macbook cuando intento actualizar un paquete de Python. Verifico la versión de pip en OS X, es demasiado antigua: 1.1. Utilizo seguir cmd para actualizar pip a 1.5.6

easy_install -U pip

Entonces este error se corrige.

NewPtone
fuente