Вопрос-Ответ

How do I get a list of locally installed Python modules?

Как мне получить список локально установленных модулей Python?

Как мне получить список модулей Python, установленных на моем компьютере?

Переведено автоматически
Ответ 1
help('modules')

в командной строке Python.

Ответ 2

Решение

Не используйте с pip> 10.0!

Мои 50 центов за получение pip freezeподобного списка из скрипта Python:

import pip
installed_packages = pip.get_installed_distributions()
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
for i in installed_packages])
print(installed_packages_list)

Как (слишком длинный) однострочник:

sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])

Предоставление:

['behave==1.2.4', 'enum34==1.0', 'flask==0.10.1', 'itsdangerous==0.24',
'jinja2==2.7.2', 'jsonschema==2.3.0', 'markupsafe==0.23', 'nose==1.3.3',
'parse-type==0.3.4', 'parse==1.6.4', 'prettytable==0.7.2', 'requests==2.3.0',
'six==1.6.1', 'vioozer-metadata==0.1', 'vioozer-users-server==0.1',
'werkzeug==0.9.4']

Область применения

Это решение применимо к системной области или к области виртуальной среды и охватывает пакеты, установленные setuptools, pip и (не дай бог) easy_install.

Мой вариант использования

Я добавил результат этого вызова на свой сервер Flask, поэтому, когда я вызываю его с помощью http://example.com/exampleServer/environment я получаю список пакетов, установленных на virtualenv сервера. Это намного упрощает отладку.

Предостережения

Я заметил странное поведение этого метода - когда интерпретатор Python вызывается в том же каталоге, что и setup.py файл, он не отображает список пакета, установленного setup.py.

Шаги по воспроизведению:

Создание виртуальной среды

$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $

Клонировать репозиторий Git с setup.py

(test_env) $ git clone https://github.com/behave/behave.git
Cloning into 'behave'...
remote: Reusing existing pack: 4350, done.
remote: Total 4350 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4350/4350), 1.85 MiB | 418.00 KiB/s, done.
Resolving deltas: 100% (2388/2388), done.
Checking connectivity... done.

У нас есть behaviour setup.py в /tmp/behave:

(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py

Установите пакет Python из репозитория Git

(test_env) $ cd /tmp/behave && pip install .
running install
...
Installed /private/tmp/test_env/lib/python2.7/site-packages/enum34-1.0-py2.7.egg
Finished processing dependencies for behave==1.2.5a1

Если мы запустим вышеупомянутое решение из /tmp

>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['behave==1.2.5a1', 'enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp'

Если мы запустим вышеупомянутое решение из /tmp/behave

>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp/behave'

behave==1.2.5a1 во втором примере отсутствует, потому что рабочий каталог содержит behave's setup.py файл.

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

Ответ 3

Теперь эти методы я попробовал сам, и я получил именно то, что было объявлено: все модули.

Увы, на самом деле вас мало волнует stdlib. Вы знаете, что вы получаете при установке Python.

На самом деле, мне нужны материалы, которые я установил.

Что на самом деле, на удивление, сработало просто отлично, так это:

pip freeze

Который вернул:

Fabric==0.9.3
apache-libcloud==0.4.0
bzr==2.3b4
distribute==0.6.14
docutils==0.7
greenlet==0.3.1
ipython==0.10.1
iterpipes==0.4
libxml2-python==2.6.21

Я говорю "удивительно", потому что инструмент установки пакета - это именно то место, где можно было бы ожидать найти эту функциональность, хотя и не под названием "freeze", но упаковка Python настолько странная, что я поражен, что этот инструмент имеет смысл. Pip 0.8.2 и Python 2.7.

Ответ 4

Начиная с pip версии 1.3, у вас есть доступ к:

pip list

Похоже, это синтаксический сахар для "pip freeze". В нем будут перечислены все модули, относящиеся к вашей установке или virtualenv, вместе с номерами их версий. К сожалению, он не отображает номер текущей версии какого-либо модуля, а также не моет посуду и не чистит обувь.

python pip