Когда я сначала установил Ubuntu (16.04 LTS), я не понял, что (в целом) это не хорошая идея установить пакеты Python через pip
использование sudo
:
sudo pip install mypackage
Но, каждый раз, когда я хотел установить пакет без sudo
Я отклонил бы разрешение.
Теперь, я понимаю, что должен был просто установить большинство/все эти пакеты с помощью --user
флаг:
pip install --user mypackage
который будет препятствовать тому, чтобы любой пакет выполнил нежелательный код на моем компьютере с полномочиями пользователя root. (У меня также теперь есть лучшая установка среды с помощью virtualenv и подобный).
Однако у меня все еще есть много пакетов, установленных с pip
который я хотел бы переустановить как пользователь вместо корня. Но, поскольку я понимаю, Ubuntu имеет некоторые пакеты Python, которые она установила по умолчанию (через apt-get
, но они все еще перечислены и могут быть удалены pip
). Таким образом, мой вопрос: как я могу удалить (и переустановить), все пакеты, которые я установил, не портя тех использование Ubuntu?
Создайте список всех пакетов Python:
pip list --format=legacy | awk '{print $1}' | sed 's/.*/\L&/' | sort > /tmp/list.pip
затем создайте список всех этих пакетов, которые были установлены apt
:
cat /tmp/list.pip | sed 's/.*/\L&/' |
xargs -Ipkg dpkg -l python-pkg python3-pkg pkg |& grep ^ii |
awk '{print $2}' | sed -r s/^python3?-// | sort | uniq > /tmp/list.apt
Теперь мы добрались до списка пакетов Python, /tmp/list.pip
который pip
может удалить, и /tmp/list.apt
которые являются пакетами, установленными apt
, проверьте их вручную и удалите тех, которые не находятся в /tmp/apt.list
.
Из-за другого соглашения о присвоении имен между способным и зернышком, рев решения не работает правильно. Я зафиксирую его последний...
Наконец получите список всех пакетов, которые установили только pip
и нет apt
(пакеты существуют в файле /tmp/list.pip
но нет /tmp/list.apt
):
comm /tmp/list.apt /tmp/list.pip -3 > /tmp/list_toRemove
Затем используйте /tmp/list_toRemove
содержание, чтобы удалить или обновить Ваш pip
пакеты.
Например, для удаления их всех можно работать:
pip uninstall $(cat /tmp/list_toRemove)
и переустановить их:
pip install $(cat /tmp/list_toRemove) --user
Используя команды как:
pip list --user
pip list --local
pip freeze --user
pip freeze --local
также включает пакеты, установленные apt
от определенных путей не используйте эти команды.