Управление локальными библиотеками Python

329
wilk

В моей системе Ubuntu я давно установил множество библиотек python в / usr / local / lib с помощью pip, некоторые из которых уже устарели из официальных пакетов ubuntu в / usr / lib. Это может быть источником проблем, поскольку те, что находятся в / usr / local / lib, имеют приоритет в среде Python по умолчанию.

Как вы думаете, что будет лучшим способом определить из дерева / usr / local / lib библиотеки, для которых существует более новая версия в / usr / lib, и те, которые теперь более необходимы?

Я думал о мониторинге деревьев / usr / local / lib / python * для сценариев python, обращающихся к его библиотекам, и ручной проверке, работает ли соответствующая библиотека в / usr / lib / python *, но является ли это лучшей стратегией?

1

1 ответ на вопрос

1
hoefling

К сожалению, сейчас нет возможности проверить это с помощью существующих инструментов командной строки, так как список пакетов с pipдовольно ограниченным (я думаю, больше будет возможно после внедрения # 4575 ). Однако с помощью небольшого количества сценариев вы можете выполнить фильтрацию пакетов и сравнение версий самостоятельно. Вот предложение:

#!/usr/bin/env python3  from distutils.version import LooseVersion from pkg_resources import find_distributions  sys_pkgs = find_distributions('/usr/lib/python3/dist-packages') local_pkgs = find_distributions('/usr/local/lib/python3.6/dist-packages')  for pkg in local_pkgs: sys_pkg = next((p for p in sys_pkgs if p.project_name == pkg.project_name), None) if sys_pkg is not None and LooseVersion(sys_pkg.version) >= LooseVersion(pkg.version): print(pkg) 

Во-первых, скрипт просматривает /usr/lib/python3/dist-packagesи /usr/local/lib/python3.6/dist-packagesдля установленных пакетов (скорректируйте версию Python / пути назначения в зависимости от ваших потребностей). После этого для каждого «локального» пакета проверьте, что:

  1. установлен «системный» пакет с тем же именем и
  2. имеет более новую версию, чем "локальная"

Если оба условия соблюдены, «местный» пакет считается устаревшим и будет напечатан. Как только у вас есть список, удаление его записей с помощью обычного pip3 uninstall <pkgname>должно быть простой задачей.

Спасибо, это именно то, что мне было нужно. wilk 5 лет назад 0
Рад, что смог помочь! hoefling 5 лет назад 0

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