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

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

Ответы [ 17 ]

357 голосов
/ 06 июля 2011

pip freeze выведет список установленных пакетов и их версий. Он также позволяет записывать эти пакеты в файл, который впоследствии можно использовать для настройки новой среды.

https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze

240 голосов
/ 26 мая 2013

Начиная с версии 1.3 pip, теперь вы можете использовать pip list

. Имеет несколько полезных опций, включая возможность показывать устаревшие пакетыВот документация: https://pip.pypa.io/en/latest/reference/pip_list/

132 голосов
/ 24 октября 2014

Если кому-то интересно, вы можете использовать команду 'pip show'.

pip show [options] <package>

В этом списке будет указан каталог установки данного пакета.

23 голосов
/ 22 февраля 2013

Если Debian ведет себя как последние версии Ubuntu относительно цели по умолчанию pip install, это очень просто: он устанавливается на /usr/local/lib/ вместо /usr/lib (apt цель по умолчанию). Чек https://askubuntu.com/questions/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip/259747#259747

Я - пользователь ArchLinux, и, экспериментируя с pip, я столкнулся с той же проблемой. Вот как я решил это в Arch.

find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs pacman -Qo | grep 'No package'

Ключ здесь /usr/lib/python2.7/site-packages, то есть каталог, в который устанавливается пип, YMMV. pacman -Qo - это то, как Arch pac kage man ager проверяет право собственности на файл. No package является частью возврата, который он дает, когда ни один пакет не владеет файлом: error: No package owns $FILENAME. Хитрый обходной путь: я спрашиваю о __init__.py, потому что pacman -Qo немного неосведомлен, когда дело доходит до каталогов: (

Чтобы сделать это для других дистрибутивов, вы должны выяснить, куда pip устанавливает что-то (просто sudo pip install что-то), как запросить право собственности на файл (метод Debian / Ubuntu - dpkg -S) и что это возвращение «ни один пакет не владеет этим путем» (Debian / Ubuntu no path found matching pattern). Пользователи Debian / Ubuntu, будьте осторожны: dpkg -S не удастся, если вы дадите ему символическую ссылку. Просто разрешите сначала, используя realpath. Как это:

find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | xargs dpkg -S 2>&1 | grep 'no path found'

Пользователи Fedora могут попробовать (спасибо @eddygeek):

find /usr/lib/python2.7/site-packages -maxdepth 2 -name __init__.py | xargs rpm -qf | grep 'not owned by any package'
16 голосов
/ 05 июня 2017

Начните с:

$ pip list

Для просмотра всех пакетов. Как только вы нашли нужный пакет, используйте:

$ pip show <package-name>

Это покажет вам подробную информацию об этом пакете, включая его папку. Вы можете пропустить первую часть, если вы уже знаете название пакета

Нажмите здесь для получения дополнительной информации о пип-шоу и здесь для получения дополнительной информации в списке пипсов.

Пример:

$ pip show jupyter
Name: jupyter
Version: 1.0.0
Summary: Jupyter metapackage. Install all the Jupyter components in one go.
Home-page: http://jupyter.org
Author: Jupyter Development Team
Author-email: jupyter@googlegroups.org
License: BSD
Location: /usr/local/lib/python2.7/site-packages
Requires: ipywidgets, nbconvert, notebook, jupyter-console, qtconsole, ipykernel    
6 голосов
/ 25 октября 2012

Ниже немного медленно, но он дает хорошо отформатированный список пакетов, о которых знает pip. То есть не все из них были установлены «по» pip, но все они должны быть в состоянии обновляться с помощью pip.

$ pip search . | egrep -B1 'INSTALLED|LATEST'

Причина, по которой он медленен, заключается в том, что он перечисляет содержимое всего репозитория Pypi. Я подал тикет , предлагающий pip list обеспечить аналогичную функциональность, но более эффективно.

Пример вывода: (поиск ограничен подмножеством вместо '.' Для всех.)

$ pip search selenium | egrep -B1 'INSTALLED|LATEST'

selenium                  - Python bindings for Selenium
  INSTALLED: 2.24.0
  LATEST:    2.25.0
--
robotframework-selenium2library - Web testing library for Robot Framework
  INSTALLED: 1.0.1 (latest)
$
5 голосов
/ 21 января 2014

pip.get_installed_distributions() выдаст список установленных пакетов

import pip
from os.path import join

for package in pip.get_installed_distributions():
    print(package.location) # you can exclude packages that's in /usr/XXX
    print(join(package.location, package._get_metadata("top_level.txt"))) # root directory of this package
4 голосов
/ 25 сентября 2016

Обратите внимание, что если на вашем компьютере установлено несколько версий Python, у вас может быть несколько версий pip, связанных с каждой из них.

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

pip3 list 

Работал для меня, где я использую Python3.4.Простое использование pip list вернуло ошибку The program 'pip' is currently not installed. You can install it by typing: sudo apt-get install python-pip.

3 голосов
/ 25 марта 2017

Более новые версии pip имеют возможность делать то, что хочет OP через pip list -l или pip freeze -l . В Debian (по крайней мере) страница руководства не проясняет это, и я только обнаружил это - при условии, что эта функция должна существовать - с pip list --help .

Есть недавние комментарии, которые предполагают, что эта функция не очевидна ни в документации, ни в существующих ответах (хотя некоторые намекают на это), поэтому я решил опубликовать. Я бы предпочел сделать это в качестве комментария, но у меня нет очков репутации.

3 голосов
/ 03 января 2017

Добавление к ответу Пола Вулка,

$ pip freeze > requirements.txt

создаст файл требований со всеми установленными пакетами в активной среде в текущем местоположении, в котором вы можете запустить

$ pip install -r requirements.txt

для установки требований в другой среде.

...