Відновіть встановлення Python до стандартних залежностей, залежно від пакету apt


14

Я багато грав зі своїми установками Python (2 і 3) і встановив купу пакетів, деякі використовували apt-get, але більшість використовували pip. Я також оновив багато aptвстановлених пакетів pipдо новішої версії.

Моє запитання:
Як я можу змінити всі ці зміни, видалити всі pipвстановлені пакети Python і просто зберегти набір попередньо встановлених пакетів за замовчуванням у їх версії сховища за замовчуванням, плюс ті, які встановлені, apt-getале лише як залежність від іншого програмного забезпечення, завжди поновлюючись до сховища версія при необхідності.

Я хочу зробити це, щоб мати пристосоване середовище Python для системи та мати мої модифікації лише у virtualenvs.

Чи можливо це без перевстановлення системи? Як би я підійшов до цього?


Відповіді:


5

Я б почав з перерахування пакетів Python, якими керує apt-get(наступний однолінійний запуск займає кілька секунд, будьте терплячі):

$ for pyfile in `ls /usr/lib/python2.7/dist-packages`; do dpkg -S "/usr/lib/python2.7/dist-packages/${pyfile}" | sed 's/:.*//g'; done | sort -u

Примітка: при необхідності замініть 2.7 будь-якою версією python, яка вас цікавить.

Потім видаліть встановлені вами пакунки вручну. Якщо ви не впевнені, які з них встановили, ви можете отримати список усіх встановлених пакетів вручну за допомогою наступної команди (див. Це питання ):

$ comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Потім видаліть встановлені вручну пакети Python, наприклад:

$ sudo apt-get remove python-tk python-scipy

Далі ви хочете знати, які пакунки встановлені за допомогою pip:

$ ls -ltd /usr/local/lib/python2.7/dist-packages/*

Ця команда перераховує вміст каталогу установки pip, відсортованого за датою останньої модифікації, що полегшує пошук самих встановлених пакунків. Наприклад, я встановив gcloudінструмент Google, який встановлює купу пакетів pip, які я не хочу видаляти, але, переглядаючи список, легко помітити, що вони були встановлені в один і той же час, тому я знаю, які з них я повинен залишити, а які я можу видалити. Перед тим, як видалити будь-який пакет пакетів, вам слід зробити короткий опис списку встановлених пакетів:

$ sudo pip freeze > $HOME/pip_freeze_snapshot.txt

Потім просто видаліть потрібні пакети, наприклад:

$ sudo pip uninstall py pytest

Нарешті, не забувайте, що деякі пакунки з піп-файлами, можливо, були встановлені у вашому каталозі користувачів. Можливо, у вас із цим все добре, але якщо ні, ви можете перелічити їх:

$ ls -ltd $HOME/.local/lib/python2.7/site-packages/*

Якщо ви хочете позбутися від усіх цих пакетів, ви можете просто видалити цей каталог. В іншому випадку просто видаліть окремі пакети, наприклад:

$ pip uninstall tensorflow

Не забудьте перевірити інші версії python (наприклад, 3.5).


Я порекомендував би оголосити громадську безпеку, що видалення занадто багато пакетів може калічити вашу систему, але в іншому випадку це чудове керівництво. (Наприклад, я був радий, що зробив це, mvа не rmсвоє, /usr/local/lib/python3.6бо через кілька хвилин я виявив, що мені потрібні деякі речі для досить основних функцій системи.
craq
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.