Что означает "ошибка: опция - единая версия - внешняя управляемая не распознана"?

Кажется, я вдруг столкнулся с ошибкой error: option --single-version-externally-managed not recognized, когда pip install содержит пакеты с вариациями (включая PyObjC и astropy). Я никогда не видел эту ошибку раньше, но теперь она также появляется на сборках travis-ci, для которых ничего не изменилось.

Указывает ли эта ошибка на распространение устаревшего дистрибутива? Или некорректно указанную опцию в setup.py? Или что-то еще?

Ответ 1

Новое обновление:

Установите последнюю версию 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, так как это более подходит для тех, кто делает ручную установку, где вы не собираетесь создавать системный пакет для распространения.

Ответ 2

Добавить --egg вариант

pip install --egg SCons

Я использую pip версию 1.4.1

Ответ 3

Установка wheel разрешила эту проблему с недавним pip (я использовал 8.1.2):

pip install wheel

Ответ 4

Попробуйте обновить setuptools следующим образом:

pip install --upgrade setuptools

Ответ 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 -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 -H flag.

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

Ответ 6

У меня есть эта проблема и на моем macbook, когда я пытаюсь обновить один пакет python. Я проверяю версию протокола в OS X, она слишком старая: 1.1. Я использую следующий cmd для обновления pip до 1.5.6

easy_install -U pip

Затем эта ошибка исправлена.