Переустановите/Обновите все пакеты пользовательского сайта Python и не Ubuntu глобальные

Когда я сначала установил 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?

0
задан 10 August 2017 в 22:02

1 ответ

Корректный путь

Создайте список всех пакетов 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 от определенных путей не используйте эти команды.

2
ответ дан 2 November 2019 в 19:45

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

Похожие вопросы: