1

В моей системе 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

К сожалению, сейчас нет возможности проверить это с помощью существующих инструментов командной строки, так как список пакетов с 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> должно стать простой задачей.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .