Co oznacza „błąd: opcja - nierozpoznana pojedyncza-wersja-zewnętrznie zarządzana”?

102

Wygląda na to, że nagle zacząłem napotykać błąd error: option --single-version-externally-managed not recognizedpodczas pip installtworzenia pakietów wersji (w tym PyObjCi astropy). Nigdy wcześniej nie widziałem tego błędu, ale teraz pojawia się również w kompilacjach Travis-ci, dla których nic się nie zmieniło.

Czy ten błąd wskazuje na nieaktualną dystrybucję? Albo jakaś niepoprawnie określona opcja w setup.py? A może coś zupełnie innego?

keflavich
źródło

Odpowiedzi:

85

Nowa aktualizacja:

Zainstaluj najnowszą wersję setuptools. Jeśli nadal otrzymujesz błąd, zainstaluj wheelrównież.

pip install -U setuptools
pip install -U wheel

Oryginalna odpowiedź / więcej szczegółów:

--single-version-externally-managed jest opcją używaną dla pakietów Pythona, instruującą moduł setuptools, aby utworzył pakiet Pythona, którym w razie potrzeby można łatwo zarządzać przez menedżera pakietów hosta, np. Yum lub Apt.

Jeśli widzisz ten komunikat, być może masz starą wersję setuptools lub Python. Spróbuj użyć programu Distribute, który jest nowszą wersją setuptools i jest wstecznie kompatybilny. Te pakiety mogą się spodziewać, że już je masz.

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

Edycja: w tym momencie dystrybucja została scalona z głównym setuptoolsprojektem. Wystarczy zainstalować najnowszą wersję programu setuptools. Jak wskazał @wynemo, możesz --eggzamiast tego użyć tej opcji, ponieważ jest ona bardziej odpowiednia dla osób wykonujących ręczne instalacje, w których nie zamierzasz tworzyć pakietu systemowego do dystrybucji.

Kelketek
źródło
1
Czy możesz dodać, która wersja się pojawiła? Używam setuptools 0.6, a pip nie wie o nowszej wersji. distributebrzmi dobrze, ale nie mogę tego zaimportować ...
keflavich
Ty nie import distribute. Dystrybucja jest zamiennikiem typu drop-in i ma tę samą nazwę modułu. import setuptoolsjest do tego potrzebny.
Kelketek
Należy więc upewnić się, że setuptools nie zastępuje dystrybucji, jeśli masz zainstalowane oba. Powinieneś zainstalować dystrybucję za pomocą pip, a następnie usunąć setuptools. Myślę, że to powinno działać.
Kelketek
17
Należy dodać: Nie używaj już dystrybucji. Dystrybucja została ponownie włączona do projektu setuptools, więc teraz jest tylko jeden, setuptoolsktóry rządzi wszystkimi.
Iguananaut
1
@johntex, ta odpowiedź została udzielona ponad rok temu, kiedy narzędzia do dystrybucji i konfiguracji nie zostały jeszcze połączone (a jeśli tak, nie słyszałem o tym). Zaktualizowałem to teraz.
Kelketek,
136

Dodaj --eggopcję

pip install --egg SCons

Używam pipwersji 1.4.1

wynemo
źródło
10
To było jedyne rozwiązanie, które faktycznie pomogło. Najnowsze narzędzia pip i setuptools były już zainstalowane, niemniej jednak czuję ten błąd.
Michael
Miałem ten problem z pyenvem i to naprawiło.
glaucon
13
Czy ktoś może szczegółowo wyjaśnić, co oznacza ta opcja i dlaczego działa?
kawing-chiu
4
Chociaż to zadziałało dla mnie, pojawił się również błąd: „DEPRECATION: --egg został wycofany i zostanie usunięty w przyszłości. Ta flaga wyklucza się wzajemnie z dużymi częściami pip i faktycznie jej użycie unieważnia zdolność pip do zarządzania proces instalacji."
natersoz
2
no such option: --eggw pip 18.1
gdw2
45

Instalacja wheelrozwiązała ten problem z najnowszym pip(użyłem 8.1.2):

pip install wheel
Seth Difley
źródło
Jeśli chcesz, możesz wrócić do edycji, nie ma problemu. Jeśli znasz dokładną wersję pipi wheelgdzie została naprawiona, warto wspomnieć o tym na wypadek, gdyby ponownie się zepsuła. A także odpowiedź nie wyjaśnia, co się dzieje.
anatoly techtonik
Ta plus odpowiedź od @sparrowt rozwiązała mój problem
David Poxon,
7

Spróbuj zaktualizować narzędzia konfiguracyjne w ten sposób:

pip install --upgrade setuptools

wróbel
źródło
5

Miałem ten problem. Okazało się, że był to problem z uprawnieniami do plików w mojej pamięci podręcznej pip.

Jeśli zobaczysz komunikat na samym początku wyjścia pip, np

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.

możesz mieć ten sam problem. Możesz to rozwiązać, upewniając się, że masz odpowiednie uprawnienia do plików w pamięci podręcznej pip (coś w rodzaju chown -R $(whoami) /home/ubuntu/.cache/pip) lub, jeśli korzystasz z systemu UNIX, możesz ustawić lokalizację pamięci podręcznej pip za pomocą parametru XDG_CACHE_HOMEenv var na jakiś folder, który posiadasz.

sans
źródło
O dziwo, też mi się udało (jeśli używasz sudodo instalacji pakietu, pamiętaj, aby dodać -Hflagę)! Naprawdę nie widzę, jakie jest połączenie między pamięcią podręczną a błędem opcji polecenia, ale nieważne.
Delgan,
1

Wypróbowałem powyższe rozwiązania. Jednak mogę rozwiązać problem tylko do momentu:

sudo pip3 install -U pip (dla python3)

Karim
źródło
0

Mam ten problem na moim Macbooku również, gdy próbuję zaktualizować jeden pakiet Pythona. Sprawdzam wersję pip w OS X, jest za stara: 1.1. Używam follow cmd, aby zaktualizować pip do wersji 1.5.6

easy_install -U pip

Następnie ten błąd jest naprawiony.

NewPtone
źródło