Найти все пакеты, установленные с помощью easy_install / pip? - PullRequest
370 голосов
/ 06 июля 2011

Есть ли способ найти все пакеты Python PyPI, которые были установлены с помощью easy_install или pip? Я имею в виду, исключая все, что было / установлено с помощью инструментов распространения (в данном случае apt-get в Debian).

Ответы [ 17 ]

2 голосов
/ 24 марта 2014

Вот одна строка для fedora или других дистрибутивов rpm (на основе подсказок @barraponto):

find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'

Добавьте это к предыдущей команде, чтобы получить более чистый вывод:

 | sed -r 's:.*/(\w+)/__.*:\1:'
1 голос
/ 12 апреля 2019

Как заметил @almenon, это больше не работает, и это не поддерживаемый способ получения информации о пакете в вашем коде.Следующее вызывает исключение:

import pip
installed_packages = dict([(package.project_name, package.version) 
                           for package in pip.get_installed_distributions()])

Для этого вы можете импортировать pkg_resources.Вот пример:

import pkg_resources
installed_packages = dict([(package.project_name, package.version)
                           for package in pkg_resources.working_set])

Я нахожусь на v3.6.5

1 голос
/ 15 октября 2018

Для тех, у кого не установлен pip, я нашел этот быстрый скрипт на github (работает с Python 2.7.13):

import pkg_resources
distros = pkg_resources.AvailableDistributions()
for key in distros:
  print distros[key]
1 голос
/ 06 июля 2011

Получите все имена файлов / папок в site-packages/dist-packages/, если он существует) и используйте ваш менеджер пакетов для удаления тех, которые были установлены через пакет.

1 голос
/ 20 ноября 2013

pip freeze выводит список всех установленных пакетов, даже если это не pip / easy_install. В CentOs / Redhat обнаружен пакет, установленный через rpm.

0 голосов
/ 19 мая 2018

Если вы используете дистрибутив Python Anaconda , вы можете использовать команду conda list, чтобы посмотреть, что было установлено каким способом:

user@pc:~ $ conda list
# packages in environment at /anaconda3:
#
# Name                    Version                   Build  Channel
_ipyw_jlab_nb_ext_conf    0.1.0            py36h2fc01ae_0
alabaster                 0.7.10           py36h174008c_0
amqp                      2.2.2                     <pip>
anaconda                  5.1.0                    py36_2
anaconda-client           1.6.9                    py36_0

Чтобы получить записи, установленные pip (включая, возможно, pip):

user@pc:~ $ conda list | grep \<pip
amqp                      2.2.2                     <pip>
astroid                   1.6.2                     <pip>
billiard                  3.5.0.3                   <pip>
blinker                   1.4                       <pip>
ez-setup                  0.9                       <pip>
feedgenerator             1.9                       <pip>

Конечно, вы, вероятно, хотите просто выбрать первый столбец, с которым вы можете делать (исключая pip при необходимости):

user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 != "pip") print $1}'
amqp        
astroid
billiard
blinker
ez-setup
feedgenerator 

Наконец, вы можете получить эти значения и удалить все из них, используя следующую команду:

user@pc:~ $ conda list | awk '$3 ~ /pip/ {if ($1 != "pip") print $1}' | xargs pip uninstall -y

Обратите внимание на использование флага -y для pip uninstall, чтобы избежать необходимости подтверждать удаление.

0 голосов
/ 05 апреля 2018

По крайней мере, для Ubuntu (возможно, и для других) это работает (вдохновлено предыдущим постом в этой теме):

printf "Installed with pip:";
pip list 2>/dev/null | gawk '{print $1;}' | while read; do pip show "${REPLY}" 2>/dev/null | grep 'Location: /usr/local/lib/python2.7/dist-packages' >/dev/null; if (( $? == 0 )); then printf " ${REPLY}"; fi; done; echo
...