Исправление всех несовместимостей менеджера пакетов и пипсов

Я установил некоторые пакеты Python с помощью pip а некоторые другие – с помощью моего менеджера пакетов ( pacman ). Теперь, каждый раз, когда я хочу обновить систему, он говорит, что некоторые файлы уже существуют, потому что он пытается установить некоторый зависимый модуль Python, который на самом деле у меня уже есть. Как я могу исправить эту проблему?

Чтобы воспроизвести проблему, вы можете просто попытаться установить что-то через pip а затем тот же пакет через менеджер пакетов, то есть:

$ sudo pip install numpy

а потом

$ sudo pacman -S python-numpy

Во-первых, вы можете удалить их так, как вы их установили, с помощью pip .

Если это не сработает, определите все файлы, не принадлежащие пакету . Вы можете использовать потерянные файлы, чтобы сделать это. Затем вручную удалите эти файлы.

Затем, в дальнейшем, либо используйте pacman для установки всех пакетов python (ruby, node, что угодно), либо используйте ключ --user для установки в ваш $ HOME.

ВНИМАНИЕ: в этом ответе используется параметр pacman команды pacman . Вы должны использовать его тогда и только тогда, когда вы понимаете, что делаете!

  1. Экспортируйте список пакетов, установленных через pip :

>>> pip freeze> packages.txt

  1. Запустите эту команду: она повторно загрузит и установит пакеты pacman установленные из pip , которые не помечены как installed в базе данных pacman .

>>> для меня в $ (awk -F “==” ‘{print $ 1}’ packages.txt); do sudo pacman -S – нужно –force –noconfirm python- $ i; сделанный

  1. Вы можете сделать то же самое с python2 , просто добавив 2 после python и pip в приведенных выше командах.

  2. Теперь используйте pacman , а не pip . Вы можете использовать pip для обновления / понижения до определенной версии пакета, если это необходимо.

Если вам нравится, вы также можете использовать версию скрипта:

 #!/bin/sh pip freeze > packages.txt for i in $(awk -F "==" '{print $1}' packages.txt) do sudo pacman -S --needed --force --noconfirm python-$i done 

Сохраните его в файл, дайте разрешение на выполнение этого файла и запустите.