Как обновить пакет disutils PyYAML?

Я пытался установить chatterbot, который зависит от PyYAML = 3.12. На моем компьютере с Ubuntu установлена ​​версия PyYAML 3.11. Поэтому я использовал следующую команду для обновления PyYAML:

sudo -H pip3 install --upgrade PyYAML

Но это дает следующую ошибку:

Невозможно удалить PyYAML. Это установленный проект distutils, и поэтому мы не можем точно определить, какие файлы ему принадлежат, что привело бы только к частичному удалению.

Моя версия pip3 - 10.0.0.

Как решить эту проблему?


person sphoenix    schedule 19.04.2018    source источник
comment
Вы всегда должны устанавливать такие программы, как chatterbot, в виртуальном окружении, используя последнюю версию Python (вероятно, не то, что Ubuntu использует для своей системы Python). Таким образом, вы можете использовать любую версию библиотеки, которая вам нужна, без возможного нарушения работы системных программ. (Для PyYAML 3.12, который имеет минимальные изменения по сравнению с 3.11, это не такая большая проблема, но есть пакеты, которые могут что-то сломать).   -  person Anthon    schedule 19.04.2018
comment
@Anthon Пожалуйста, превратите ваш комментарий в ответ. Думаю, это следует считать лучшим ответом на этот вопрос.   -  person Stephen G Tuggy    schedule 22.10.2019
comment
@Anthon да, кроме случаев, когда вы устанавливаете в контейнере Docker   -  person CpILL    schedule 16.07.2020


Ответы (8)


Попробуйте использовать флаг --ignore-installed:

sudo -H pip3 install --ignore-installed PyYAML

Это работает, потому что для обновления пакета pip сначала удаляет старую версию, а затем устанавливает новую версию. Это этап удаления пакетов distutils. С флагом --ignore-installed этап удаления пропускается, и новая версия просто устанавливается поверх старой.

person Fenhl    schedule 29.11.2018
comment
Есть идеи, что делать, если эта ошибка возникает при выполнении conda update env -f environment.yml? - person Austin; 09.10.2019

Вы можете попробовать это:

$pip install --ignore-installed PyYAML
person mehboob sayyed    schedule 27.09.2019
comment
Это кажется наиболее разумным ответом ... без сожалений - person mmann1123; 29.01.2020

Я обнаружил, что в этой проблеме Github, что pip 10 больше не удаляет пакеты distutils . Поэтому я понизил рейтинг до версии 8.1.1. И теперь это работает.

Если кто-нибудь, просматривающий этот вопрос, знает, как удалить или обновить пакет distutils с помощью pip 10.0.0, сообщите мне об этом здесь. :)

(Если кому-то нужно)
И для понижения версии я использовал следующее:

sudo -H pip3 install pip==8.1.1

person sphoenix    schedule 19.04.2018
comment
Почему версия 8.1.1? Просто любопытно, но это отлично сработало! - person Tony-Caffe; 06.06.2018
comment
Я закончил тем, что удалил папку из distutils: sudo rm -rf /usr/lib/python3/dist-packages/yaml, sudo rm -rf /usr/lib/python3/dist-packages/PyYAML-* - person baldr; 06.06.2018
comment
@ Tony-Caffe ну, до обновления моя версия pip была 8.1.1. Поэтому я перешел на 8.1.1. Но я думаю, что он должен работать и для 8.0. * - person sphoenix; 07.06.2018

Проблема:

Невозможно удалить PyYAML. Это установленный проект distutils, и поэтому мы не можем точно определить, какие файлы ему принадлежат, что привело бы только к частичному удалению.

Решение: удалить пакет Dist и ЗАПУСТИТЬ

sudo rm -rf /usr/lib/python3/dist-packages/yaml

sudo rm -rf /usr/lib/python3/dist-packages/PyYAML-*

Удаление папки из distutils работает

person Jinna Balu    schedule 26.12.2018
comment
Это не работает, даже после удаления материала dist, все равно выдает ту же ошибку. - person Schütze; 25.10.2019

Я лично установил PyYAML на anaconda, просто выполнив conda remove PyYAML, а затем выполнив мою команду pip.

person Baptiste Florentin    schedule 24.08.2019
comment
Это сломало мою Анаконду. Нампи ушел. Пришлось переустановить. - person Jonathan Mugan; 03.12.2019
comment
Спасибо за вдохновение, что это могло произойти из-за установки conda. Вместо удаления я использовал conda update, который исправил мой pip install без нарушения других зависимостей, упомянутых выше. - person Christopher Howlin; 22.07.2020

conda remove PyYAML

удаление conda займет время

pip install chatterbot
pip install chatterbot_corpus

Таким образом, моя ошибка была устранена, когда я пытался импортировать чат-бота из чат-бота

person Buddhadeb Mondal    schedule 12.10.2020

У меня была аналогичная проблема, когда пакет PyYAML был установлен conda. Есть еще один ответ на использование conda remove.

Вместо этого я обошел эту проблему с помощью conda update PyYAML, эффективно используя conda для обновления зависимости, которую pip пытается обновить.

person Christopher Howlin    schedule 21.07.2020

Мне просто пришлось удалить python3-yaml и снова попробовать pip

sudo apt-get purge python3-yaml
person Hem    schedule 11.06.2021
comment
Это ОЧЕНЬ ПЛОХАЯ идея, она удалит такие важные вещи, как ubuntu-desktop. - person Benjamin Bray; 13.07.2021
comment
Почему удаление парсера YAML приведет к удалению ubuntu-desktop? Я даже не считаю это зависимым пакетом: packages.ubuntu.com/bionic/python3-yaml - person Hem; 13.07.2021
comment
Кажется, что apt purge также удалит все пакеты, которые зависят от python3-yaml, а это довольно много. Я сам попробовал эту команду и apt предупредил меня, что ubuntu-desktop вместе с рядом других важных пакетов также будет удален, если я выполню его. - person Benjamin Bray; 14.07.2021