pip не может удалить <package>: "Это установленный distutils проект"

Я попытался установить модуль Twilio:

sudo -H pip install twilio

И я получил эту ошибку:

Installing collected packages: pyOpenSSL
  Found existing installation: pyOpenSSL 0.13.1
Cannot uninstall 'pyOpenSSL'. It is a distutils installed project and             
thus we cannot accurately determine which files belong to it which 
would lead to only a partial uninstall.

Кто-нибудь знает, как удалить pyOpenSSL?

6 ответов

Решение

Эта ошибка означает, что метаданные этого пакета не включают в себя список файлов, которые ему принадлежат. Скорее всего, вы установили этот пакет через менеджер пакетов вашей ОС, поэтому вам нужно использовать его вместо pip обновить или удалить его тоже.

См., Например, Обновление до версии 10: Это установленный дистрибутивный проект, и поэтому мы не можем точно определить, какие файлы принадлежат ему, что приведет только к частичной деинсталляции. · Выпуск #5247 · pypa/pip для одного такого примера, где пакет был установлен с apt,


В качестве альтернативы, в зависимости от ваших потребностей, может оказаться более продуктивным не использовать Python вашей системы и / или ее глобальную среду, а создать частную установку и / или среду Python. Здесь есть много вариантов, включая virtualenv, venv, pyenv, pipenv и установка Python из исходного кода в /usr/local или же $HOME / $HOME/.local (или же /opt/<whatever>).


Наконец, я должен прокомментировать часто рекомендуемые (например, в пипс 10 и apt: как избежать ошибок "Cannot uninstall X" для пакетов distutils) --ignore-installedpip переключатель.

Это может работать (возможно, достаточно долго для нужд вашего бизнеса), но может также привести к непредсказуемым последствиям в системе. Одно можно сказать наверняка: это делает конфигурацию системы неподдерживаемой и, следовательно, не поддерживаемой - потому что вы по существу перезаписали файлы из вашего дистрибутива другими произвольными вещами. Например:

  • Если новые файлы в двоичном формате несовместимы со старыми, другое программное обеспечение из дистрибутива, созданное для связи с оригиналами, будет вызывать сбои или иные неисправности.
  • Если в новой версии есть другой набор файлов, вы получите смесь старых и новых файлов, которые могут сломать как зависимое программное обеспечение, так и сам пакет.
  • Если вы позже измените пакет с помощью менеджера пакетов вашей ОС, он перезапишет pip -установленные файлы, с такими же непредсказуемыми результатами.
  • Если есть такие вещи, как файлы конфигурации, различия между версиями также могут привести к всевозможным поломкам.

У меня была такая же ошибка, и я смог ее устранить, выполнив следующие действия:

  pip install --ignore-installed pyOpenSSL

Это установит пакет с последней версией, а затем, если вы попытаетесь установить,

  pip install twilio

Это сработает.

Как правило, для подобных ошибок используйте следующий формат:

      pip install --ignore-installed [package name]==[package version]

В моем случае я устанавливал пакет из внутреннего git, используя следующую команду:

      python -m pip install package.whl --force

Я делал это, потому что не хотел явно удалять предыдущую версию и просто заменять ее более новой версией. Но что он также делает, так это снова устанавливает все зависимости. Я получал ошибку в одном из этих пакетов. Удаление решило проблему.

хочу добавить, имея также работал для меня. И удаление по сути делает то же самое в моем случае.

У меня была эта ошибка, и единственный способ ее исправить - вручную удалить проблемный каталог из site-packages.

После этого вам может потребоваться переустановить пакеты с помощью --force-reinstall.

Прочитав приведенные выше комментарии, я понял, что пакет a был установлен с помощью conda, а новый пакет b, который я пытался установить с помощью pip, вызывал проблемы. Мне повезло, что пакет b имел поддержку conda, поэтому использование conda для установки пакета b решило проблему.

Другие вопросы по тегам