К сожалению, сейчас нет возможности проверить это с помощью существующих инструментов командной строки, так как список пакетов с 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 / пути назначения в зависимости от ваших потребностей). После этого для каждого «локального» пакета проверьте, что:
- установлен «системный» пакет с тем же именем и
- имеет более новую версию, чем "локальная"
Если оба условия соблюдены, «местный» пакет считается устаревшим и будет напечатан. Как только у вас есть список, удаление его записей с помощью обычного pip3 uninstall <pkgname>
должно быть простой задачей.