Що означає "помилка: параметр - вибір-версія-зовні не керується не впізнається"?


102

Здається, я раптом почав стикатися з помилкою error: option --single-version-externally-managed not recognizedпід час pip installING пакетів (включаючи PyObjCта astropy). Я ніколи раніше не бачив цієї помилки, але зараз вона з'являється і на традиційних конструкціях, для яких нічого не змінилося.

Чи вказує ця помилка на застаріле поширення? Або якийсь неправильно вказаний варіант у setup.py? Або щось інше цілком?

Відповіді:


84

Нове оновлення:

Встановіть останню версію setuptools. Якщо ви все-таки отримаєте помилку, також встановіть wheel.

pip install -U setuptools
pip install -U wheel

Оригінальний відповідь / Детальніше:

--single-version-externally-managed - це параметр, який використовується для пакетів Python, що навчають модулю setuptools створювати пакет Python, який при необхідності може легко управляти менеджером пакетів хостів, як-от Yum або Apt.

Якщо ви бачите це повідомлення, у вас може бути стара версія setuptools або Python. Спробуйте скористатись Distribute, яка є новою версією setuptools і назад сумісна. Ці пакети, можливо, очікують, що у вас вже є.

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

Редагувати: На даний момент розподіл було об'єднано в основний setuptoolsпроект. Просто встановіть останню версію setuptools. Як зазначається @wynemo, ви можете скористатися цим --eggваріантом, оскільки це більш доречно для тих, хто робить встановлення вручну, де ви не збираєтесь створювати системний пакет для розповсюдження.


1
Чи можете ви додати, у якій версії з'явилися? Я використовую setuptools 0.6 і pip не знає про нову версію. distributeзвучить правильно, але я не можу імпортувати його ...
keflavich

Ви цього не робите import distribute. Distribute - це заміна, що випадає, і має однакову назву модуля. import setuptoolsпотрібен і для цього.
Kelketek

Тоді потрібно зробити так, щоб переконатися, що setuptools не передує розповсюдженню, якщо вони встановлені. Вам слід встановити розподіл за допомогою pip, а потім видалити setuptools. Я думаю, що це має спрацювати.
Kelketek

17
Слід додати: Більше не використовуйте розповсюдження. Розподіл було об'єднано назад у проект setuptools, тож тепер існує лише один, setuptoolsщоб керувати ними.
Ігуананавт

1
@johntex, ця відповідь була зроблена більше року тому, коли розповсюдження та setuptools ще не були об'єднані (або якби вони були, я б не чув про це). Я оновив його зараз.
Келкетек

136

Додати --eggопцію

pip install --egg SCons

Я використовую pipверсію 1.4.1


10
Це було єдине рішення, яке насправді допомогло. Останні піп і setuptools вже встановлені, проте я помиляюся з цією помилкою.
Майкл

У мене була проблема з pyenv і це виправлено.
glaucon

13
Чи може хтось детально пояснити, що означає цей варіант і чому це працює?
kawing-chiu

4
Хоча це працювало для мене, я також отримав помилку: "ВИЗНАЧЕННЯ: - яйце застаріле і буде видалено в майбутньому. Цей прапор взаємно виключається з великими частинами піп, і фактично за допомогою нього недійсна здатність файлу управління керувати процес встановлення. "
natersoz

2
no such option: --eggв pip 18.1
gdw2

45

Встановлення wheelвирішило цю проблему за останнім часом pip(я використовував 8.1.2):

pip install wheel

Ви можете повернутися до редагування, якщо хочете, без проблем. Якщо ви знаєте точну версію pipі wheelде вона була зафіксована, можливо, варто згадати її, якщо вона буде порушена знову. А також відповідь не пояснює, що все одно відбувається.
anatoly techtonik

Цей плюс відповіді від @sparrowt виправив мою проблему
Девід Поксон


5

У мене була ця проблема. Виявилося, що це проблема з дозволами на файли в моєму кеш-файлі.

Якщо ви бачите повідомлення на самому початку вашого вихідного повідомлення

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.

у вас може бути та сама проблема. Ви можете вирішити це, переконавшись, що у вас є належні дозволи на файл у кеш-файлі (щось на кшталт chown -R $(whoami) /home/ubuntu/.cache/pip), або, якщо ви перебуваєте в UNIX, ви можете встановити розташування кеш- XDG_CACHE_HOMEфайлів з env var у деякій папці, у якій ви володієте.


Дивно, але він працював і для мене (якщо ви використовуєте sudoдля встановлення пакета, обов'язково додайте -Hпрапор)! Я дійсно не бачу, який зв’язок між кешем і помилкою параметра команди, але нічого неважливо.
Дельган

1

Я спробував вищевказані рішення. Однак я можу вирішити проблему лише до цього:

sudo pip3 install -U pip (для python3)


0

У мене є проблема в моєму macbook, коли я намагаюся оновити один пакет python. Я перевіряю версію pip в OS X, вона занадто стара: 1.1. Я використовую follow cmd для оновлення pip до 1.5.6

easy_install -U pip

Потім ця помилка виправляється.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.