Есть ли способ найти все пакеты Python PyPI, которые были установлены с помощью easy_install или pip? Я имею в виду, исключая все, что было / установлено с помощью инструментов распространения (в данном случае apt-get на Debian).
python
pip
easy-install
pypi
Юрген А. Эрхард
источник
источник
Ответы:
pip freeze
выведет список установленных пакетов и их версий. Он также позволяет записывать эти пакеты в файл, который впоследствии можно будет использовать для настройки новой среды.https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze
источник
pip freeze
иpip list
перечислить все. Они не исключают пакеты, которые не были установленыpip
.pip freeze
надежным в сценариях, в то время какpip list
генерирует неожиданные ошибки при использовании с каналами.pip list -l
илиpip list --local
лучший ответ, см stackoverflow.com/a/43012269/491884 по @MJBНачиная с версии 1.3, вы можете использовать
pip list
Он имеет несколько полезных опций, в том числе возможность показывать устаревшие пакеты. Вот документация: https://pip.pypa.io/en/latest/reference/pip_list/
источник
pip freeze
pip list --user
показывает только пакеты, установленные пользователем, и исключает общесистемные пакеты.Если кому-то интересно, вы можете использовать команду «pip show».
Это перечислит каталог установки данного пакета.
источник
Если Debian ведет себя как последние версии Ubuntu относительно
pip install
цели по умолчанию, это очень просто: он устанавливается/usr/local/lib/
вместо/usr/lib
(apt
цель по умолчанию). Проверьте /ubuntu/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip/259747#259747Я пользователь ArchLinux и, поэкспериментировав с pip, я столкнулся с этой же проблемой. Вот как я решил это в Arch.
Ключевым моментом здесь является то
/usr/lib/python2.7/site-packages
, что каталог, в который устанавливается pip, YMMV.pacman -Qo
как Арча пак Kage человек Ager проверяет владение файла.No package
является частью возвращения он дает , когда пакет не является владельцем файла:error: No package owns $FILENAME
. Хитрый обходной путь: я спрашиваю об этом,__init__.py
потомуpacman -Qo
что немного невежественен, когда дело доходит до каталогов :(Для того, чтобы сделать это для других дистрибутивов, вы должны выяснить, куда
pip
устанавливать вещи (простоsudo pip install
что-то), как запросить право собственности на файл (метод Debian / Ubuntudpkg -S
) и что возвращает «ни один пакет не владеет этим путем» (Debian / Убунту естьno path found matching pattern
). Пользователи Debian / Ubuntu, будьте осторожны:dpkg -S
произойдет сбой, если вы дадите ему символическую ссылку. Просто разрешите сначала, используяrealpath
. Нравится:Пользователи Fedora могут попробовать (спасибо @eddygeek):
источник
dpkg
записывает ошибку в stderr, поэтому я должен добавить перенаправление2>&1
. И для международного выхода добавитьLANG=
передxargs dpkg -s
. иsed
это также хороший инструмент;), чтобы сохранить только имя пакета пути. Итак, я заканчиваю:find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | LANG= xargs dpkg -S 2>&1 | grep 'no path found' | sed "s/.*\/\([^\/]*\)\/__init__\.py.*/\1/"
Начните с:
Чтобы перечислить все пакеты. Как только вы нашли нужный пакет, используйте:
Это покажет вам детали об этом пакете, включая его папку. Вы можете пропустить первую часть, если вы уже знаете название пакета
Нажмите здесь для получения дополнительной информации о пип-шоу и здесь для получения дополнительной информации о пип-листе.
Пример:
источник
pip.get_installed_distributions()
выдаст список установленных пакетовисточник
Ниже немного медленно, но он дает хорошо отформатированный список пакетов, о
pip
которых известно. То есть не все из них были установлены «по» pip, но все они должны быть в состоянии быть обновлены с помощью pip.Причина, по которой он работает медленно, заключается в том, что он перечисляет содержимое всего репозитория Pypi. Я подал билет с предложением
pip list
предоставить аналогичную функциональность , но более эффективно.Пример вывода: (поиск ограничен подмножеством вместо «.» Для всех.)
источник
Добавляя к ответу Пола Вулка,
создаст файл требований со всеми установленными пакетами вместе с установленными номерами версий в активной среде в текущем местоположении. Бег
установит пакеты, указанные в файле требований.
источник
Более новые версии pip могут делать то, что хочет OP через
pip list -l
илиpip freeze -l
(--list
).В Debian (по крайней мере) страница руководства не проясняет это, и я обнаружил это только в предположении, что эта функция должна существовать - с
pip list --help
.Есть недавние комментарии, которые предполагают, что эта функция не очевидна ни в документации, ни в существующих ответах (хотя некоторые намекают на это), поэтому я подумал, что должен написать. Я бы предпочел сделать это как комментарий, но у меня нет очков репутации.
источник
pip freeze --local
8 лет.pip list --local
тоже доступно ... но обратите внимание, что вопрос OP не о виртуальных средах (которые--local
поддерживают), а о различении пакетов дистрибутивов отsudo pip install
пакетов.Обратите внимание: если на вашем компьютере установлено несколько версий Python, возможно, у вас есть несколько версий pip.
В зависимости от ваших ассоциаций вам может понадобиться быть очень осторожным в отношении того, какую команду pip вы используете:
Работал для меня, где я использую Python3.4. Простое использование
pip list
вернуло ошибкуThe program 'pip' is currently not installed. You can install it by typing: sudo apt-get install python-pip
.источник
Как отметил @almenon, это больше не работает, и это не поддерживаемый способ получения информации о пакете в вашем коде. Следующее вызывает исключение:
Для этого вы можете импортировать
pkg_resources
. Вот пример:Я на
v3.6.5
источник
Вот одна строка для fedora или других дистрибутивов rpm (на основе подсказок @barraponto):
Добавьте это к предыдущей команде, чтобы получить более чистый вывод:
источник
Получить все имена файлов / папок
site-packages/
(и,dist-packages/
если они существуют), и использовать ваш менеджер пакетов, чтобы удалить те, которые были установлены через пакет.источник
В pip freeze перечислены все установленные пакеты, даже если это не pip / easy_install. На CentOs / Redhat обнаружен пакет, установленный через rpm.
источник
Если вы используете дистрибутив Python Anaconda , вы можете использовать
conda list
команду, чтобы увидеть, что было установлено каким способом:Чтобы получить записи, установленные
pip
(включая, возможно,pip
сам):Конечно, вы, вероятно, захотите просто выбрать первый столбец, с которым вы можете сделать (исключая
pip
при необходимости):Наконец, вы можете получить эти значения и удалить все из них с помощью следующего:
Обратите внимание на использование
-y
флага для того,pip uninstall
чтобы избежать необходимости удалять подтверждение.источник
Для тех, у кого не установлен pip, я нашел этот быстрый скрипт на github (работает с Python 2.7.13):
источник
Список пипсов [опции] Вы можете увидеть полную ссылку здесь
источник
По крайней мере, для Ubuntu (может быть, и другие) это работает (вдохновленный предыдущим постом в этой теме):
источник