Cosa indica "errore: opzione - versione singola gestita esternamente non riconosciuta"?


102

Mi sembra di aver improvvisamente iniziato a riscontrare l'errore error: option --single-version-externally-managed not recognizeddurante pip installl'inserimento di pacchetti varions (inclusi PyObjCe astropy). Non ho mai visto questo errore prima, ma ora viene visualizzato anche su build travis-ci per le quali non è cambiato nulla.

Questo errore indica una distribuzione non aggiornata? O qualche opzione specificata in modo errato in setup.py? O qualcos'altro completamente?

Risposte:


84

Nuovo aggiornamento:

Installa l'ultima versione di setuptools. Se ricevi ancora l'errore, installa wheelanche tu .

pip install -U setuptools
pip install -U wheel

Risposta originale / Ulteriori dettagli:

--single-version-externally-managed è un'opzione utilizzata per i pacchetti Python che istruiscono il modulo setuptools a creare un pacchetto Python che può essere facilmente gestito dal gestore pacchetti dell'host, se necessario, come Yum o Apt.

Se visualizzi questo messaggio, potresti avere una vecchia versione di setuptools o Python. Prova a utilizzare Distribute, che è una versione più recente di setuptools ed è retrocompatibile. Questi pacchetti potrebbero aspettarsi che tu lo abbia già.

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

Modifica: a questo punto, la distribuzione è stata fusa nel setuptoolsprogetto principale . Basta installare l'ultima versione di setuptools. Come indicato da @wynemo, potresti --egginvece utilizzare l' opzione, poiché è più appropriata per coloro che eseguono installazioni manuali in cui non intendi creare un pacchetto di sistema per la distribuzione.


1
Puoi aggiungere in quale versione è apparsa? Sto usando setuptools 0.6 e pip non conosce una versione più recente. distributesuona bene, ma non posso importarlo ...
keflavich

Non lo fai import distribute. Distribute è un sostituto immediato e ha lo stesso nome di modulo. import setuptoolsè necessario anche per questo.
Kelketek

La cosa da fare, quindi, è assicurarsi che setuptools non sovrascriva distribute, se sono installati entrambi. È necessario installare distribute con pip e quindi rimuovere setuptools. Immagino che dovrebbe funzionare.
Kelketek

17
Dovrebbe essere aggiunto: non utilizzare più distribuire. Distribute è stato unito di nuovo nel progetto setuptools, quindi ora ce n'è solo uno setuptoolsper regolarli tutti.
Iguananaut

1
@johntex, questa risposta è stata data più di un anno fa, quando distribute e setuptools non si erano ancora fusi (o se lo avessero fatto, non ne avevo sentito parlare). L'ho aggiornato ora.
Kelketek

136

Aggiungi --eggopzione

pip install --egg SCons

Uso la pipversione 1.4.1


10
Quella era l'unica soluzione che effettivamente aiutò. Pip e setuptools recenti erano già installati, tuttavia odio questo errore.
Michael

Ho avuto questo problema con pyenv e questo lo ha risolto.
glaucon

13
Qualcuno può spiegare in dettaglio cosa significa questa opzione e perché funziona?
kawing-chiu

4
Sebbene abbia funzionato per me, ho anche ricevuto l'errore: "DEPRECAZIONE: --egg è stato deprecato e verrà rimosso in futuro. Questo flag si esclude a vicenda con gran parte di pip e il suo utilizzo invalida la capacità di pip di gestire il processo di installazione. "
natersoz

2
no such option: --eggin pip 18.1
gdw2

45

L'installazione ha wheelrisolto questo problema con recenti pip(ho usato 8.1.2):

pip install wheel

Puoi tornare alla modifica se lo desideri, nessun problema. Se conosci la versione esatta di pipe wheeldove è stata riparata, potrebbe valere la pena menzionarla nel caso in cui si rompa di nuovo. Inoltre, la risposta non spiega comunque cosa sta succedendo.
anatoly techtonik

Questa risposta plus di @sparrowt ha risolto il mio problema
David Poxon

7

Prova ad aggiornare gli strumenti di configurazione in questo modo:

pip install --upgrade setuptools


5

Stavo avendo questo problema. Si è scoperto che era un problema con i permessi dei file nella mia cache pip.

Se vedi un messaggio all'inizio dell'output del pip come

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.

potresti avere lo stesso problema. Puoi risolverlo assicurandoti di disporre delle autorizzazioni appropriate per i file sulla cache pip (qualcosa di simile chown -R $(whoami) /home/ubuntu/.cache/pip) o, se sei su UNIX, puoi impostare la posizione della cache pip con XDG_CACHE_HOMEenv var su una cartella di tua proprietà.


Sorprendentemente, ha funzionato anche per me (se usi sudoper installare il pacchetto, assicurati di aggiungere il -Hflag)! Non vedo davvero quale sia la connessione tra la cache e l'errore dell'opzione di comando, ma non importa.
Delgan

1

Ho provato le soluzioni di cui sopra. Tuttavia, posso risolvere il problema solo fino a quando non:

sudo pip3 install -U pip (per python3)


0

Ho questo problema sul mio macbook anche quando provo ad aggiornare un pacchetto python. Controllo la versione di pip in OS X, è troppo vecchia: 1.1. Uso follow cmd per aggiornare pip a 1.5.6

easy_install -U pip

Quindi questo errore viene corretto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.