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

Я хотел бы получить список модулей Python, которые находятся в моей установке Python (сервер UNIX).

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

Ответ 1

Решение

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

Мои 50 центов за получение списка pip freeze пипса -like из скрипта 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.

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

Я добавил результат этого вызова на свой флеш-сервер, поэтому, когда я вызываю его с помощью 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.
.

Мы ведем себя как 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 setup.py файл.

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

Ответ 2

help('modules')

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

Ответ 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

  • В ipython вы можете ввести "import Tab".

  • В стандартном интерпретаторе Python вы можете ввести "help('modules')".

  • В командной строке вы можете использовать pydoc modules.

  • В script вызовите pkgutil.iter_modules().

Ответ 5

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

pip list

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

Ответ 6

Я просто использую это, чтобы видеть используемые в настоящее время модули:

import sys as s
s.modules.keys()

который показывает все модули, запущенные на вашем питоне.

Для всех встроенных модулей используйте:

s.modules

Что такое dict, содержащий все модули и объекты импорта.

Ответ 7

В обычной оболочке просто используйте

pydoc modules

Ответ 8

Начиная с 10 пункта, принятый ответ больше не будет работать. Команда разработчиков удалила доступ к подпрограмме get_installed_distributions. В setuptools есть альтернативная функция для того же. Вот альтернативная версия, которая работает с pip 10:

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

Пожалуйста, дайте мне знать, будет ли это работать или не будет работать в предыдущих версиях pip.

Ответ 9

Если нам нужно вывести список установленных пакетов в оболочке Python, мы можем использовать команду help следующим образом

>>help('modules package')

Ответ 10

Я обычно использую pip list, чтобы получить список пакетов (с версией).

Конечно, это работает и в виртуальной среде. Чтобы показать, что установлено только в виртуальной среде (не в глобальных пакетах), используйте pip list --local.

Здесь документация, показывающая все доступные опции pip list, с несколькими хорошими примерами.

Ответ 11

Очень простой поиск с использованием pkgutil.iter_modules

from pkgutil import iter_modules
a=iter_modules()
while True:
    try: x=a.next()
    except: break
    if 'searchstr' in x[1]: print x[1]

Ответ 12

Я столкнулся с пользовательским установленным python 2.7 на OS X. Он потребовал, чтобы X11 отображал установленные модули (как с помощью help, так и pydoc).

Чтобы иметь возможность перечислять все модули без установки X11, я запускал pydoc в качестве http-сервера, то есть:

pydoc -p 12345

Затем можно направить Safari на http://localhost:12345/, чтобы увидеть все модули.

Ответ 13

в окнах, введите это в cmd

c:\python\libs>python -m pip freeze

Ответ 14

Это было вдохновлено ответом Адама Матана (принятым):

import tabulate
try:
  from pip import get_installed_distributions
except:
  from pip._internal.utils.misc import get_installed_distributions

tabpackages = []
for _, package in sorted([('%s %s' % (i.location, i.key), i) for i in get_installed_distributions()]):
  tabpackages.append([package.location, package.key, package.version])

print(tabulate.tabulate(tabpackages))

который затем распечатывает таблицу в виде

19:33 [email protected] [iot-wifi-2] ~/python$ python installed_packages.py
-------------------------------------------  --------------  ------
/home/pi/.local/lib/python2.7/site-packages  enum-compat     0.0.2
/home/pi/.local/lib/python2.7/site-packages  enum34          1.1.6
/home/pi/.local/lib/python2.7/site-packages  pexpect         4.2.1
/home/pi/.local/lib/python2.7/site-packages  ptyprocess      0.5.2
/home/pi/.local/lib/python2.7/site-packages  pygatt          3.2.0
/home/pi/.local/lib/python2.7/site-packages  pyserial        3.4
/usr/local/lib/python2.7/dist-packages       bluepy          1.1.1
/usr/local/lib/python2.7/dist-packages       click           6.7
/usr/local/lib/python2.7/dist-packages       click-datetime  0.2
/usr/local/lib/python2.7/dist-packages       construct       2.8.21
/usr/local/lib/python2.7/dist-packages       pyaudio         0.2.11
/usr/local/lib/python2.7/dist-packages       tabulate        0.8.2
-------------------------------------------  --------------  ------

что позволяет вам легко определить, какие пакеты вы установили с использованием и без использования sudo.


Заметка в стороне: я заметил, что когда я устанавливаю пакет один раз с помощью sudo и один раз без него, один имеет приоритет, так что другой не отображается в списке (отображается только одно местоположение). Я считаю, что в списке будет только один из них в локальном каталоге. Это может быть улучшено.

Ответ 15

Помимо использования pip freeze, я устанавливал yolk в своих виртуальных средах.

Ответ 16

  • чтобы получить все доступные модули, запустите sys.modules
  • чтобы получить все установленные модули (чтение: установлено pip), вы можете посмотреть pip.get_installed_distributions()

Для второй цели, пример кода:

import pip
for package in pip.get_installed_distributions():
    name = package.project_name # SQLAlchemy, Django, Flask-OAuthlib
    key = package.key # sqlalchemy, django, flask-oauthlib
    module_name = package._get_metadata("top_level.txt") # sqlalchemy, django, flask_oauthlib
    location = package.location # virtualenv lib directory etc.
    version = package.version # version number

Ответ 17

Это решение основано на модулях importlib и pkgutil и работает с CPython 3.4 и CPython 3.5, но не поддерживает CPython 2.


объяснение

  1. sys.builtin_module_names - имена всех встроенных модулей (см. мой ответ здесь)
  2. pkgutil.iter_modules() - возвращает информацию обо всех доступных модулях
  3. importlib.util.find_spec() - возвращает информацию об импорте модуля, если существует
  4. BuiltinImporter - импортер для встроенных модулей (документов)
  5. SourceFileLoader - импортер для стандартного модуля Python (по умолчанию имеет расширение *.py) (документы)
  6. ExtensionFileLoader - импортер для модулей в виде разделяемой библиотеки (написано на C или C++)

Полный код

import sys
import os
import shutil
import pkgutil
import importlib
import collections

if sys.version_info.major == 2:
    raise NotImplementedError('CPython 2 is not supported yet')


def main():

    # name this file (module)
    this_module_name = os.path.basename(__file__).rsplit('.')[0]

    # dict for loaders with their modules
    loaders = collections.OrderedDict()

    # names of build-in modules
    for module_name in sys.builtin_module_names:

        # find an information about a module by name
        module = importlib.util.find_spec(module_name)

        # add a key about a loader in the dict, if not exists yet
        if module.loader not in loaders:
            loaders[module.loader] = []

        # add a name and a location about imported module in the dict
        loaders[module.loader].append((module.name, module.origin))

    # all available non-build-in modules
    for module_name in pkgutil.iter_modules():

        # ignore this module
        if this_module_name == module_name[1]:
            continue

        # find an information about a module by name
        module = importlib.util.find_spec(module_name[1])

        # add a key about a loader in the dict, if not exists yet
        loader = type(module.loader)
        if loader not in loaders:
            loaders[loader] = []

        # add a name and a location about imported module in the dict
        loaders[loader].append((module.name, module.origin))

    # pretty print
    line = '-' * shutil.get_terminal_size().columns
    for loader, modules in loaders.items():
        print('{0}\n{1}: {2}\n{0}'.format(line, len(modules), loader))
        for module in modules:
            print('{0:30} | {1}'.format(module[0], module[1]))


if __name__ == '__main__':
    main()

использование

Для CPython3.5 (усеченный)

$ python3.5 python_modules_info.py 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
30: <class '_frozen_importlib.BuiltinImporter'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ast                           | built-in
_codecs                        | built-in
_collections                   | built-in
_functools                     | built-in
_imp                           | None
_io                            | built-in
_locale                        | built-in
_operator                      | built-in
_signal                        | built-in
_sre                           | built-in
_stat                          | built-in
_string                        | built-in
_symtable                      | built-in
_thread                        | built-in
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
227: <class '_frozen_importlib_external.SourceFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__future__                     | /usr/local/lib/python3.5/__future__.py
_bootlocale                    | /usr/local/lib/python3.5/_bootlocale.py
_collections_abc               | /usr/local/lib/python3.5/_collections_abc.py
_compat_pickle                 | /usr/local/lib/python3.5/_compat_pickle.py
_compression                   | /usr/local/lib/python3.5/_compression.py
_dummy_thread                  | /usr/local/lib/python3.5/_dummy_thread.py
_markupbase                    | /usr/local/lib/python3.5/_markupbase.py
_osx_support                   | /usr/local/lib/python3.5/_osx_support.py
_pydecimal                     | /usr/local/lib/python3.5/_pydecimal.py
_pyio                          | /usr/local/lib/python3.5/_pyio.py
_sitebuiltins                  | /usr/local/lib/python3.5/_sitebuiltins.py
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
64: <class '_frozen_importlib_external.ExtensionFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_bisect                        | /usr/local/lib/python3.5/lib-dynload/_bisect.cpython-35m-x86_64-linux-gnu.so
_bz2                           | /usr/local/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so
_codecs_cn                     | /usr/local/lib/python3.5/lib-dynload/_codecs_cn.cpython-35m-x86_64-linux-gnu.so
_codecs_hk                     | /usr/local/lib/python3.5/lib-dynload/_codecs_hk.cpython-35m-x86_64-linux-gnu.so
_codecs_iso2022                | /usr/local/lib/python3.5/lib-dynload/_codecs_iso2022.cpython-35m-x86_64-linux-gnu.so
(****************************truncated*******************************)

Для CPython3.4 (усечено)

$ python3.4 python_modules_info.py
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
54: <class '_frozen_importlib.BuiltinImporter'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ast                           | built-in
_bisect                        | built-in
_codecs                        | built-in
_collections                   | built-in
_datetime                      | built-in
_elementtree                   | built-in
_functools                     | built-in
_heapq                         | built-in
_imp                           | None
_io                            | built-in
_locale                        | built-in
_md5                           | built-in
_operator                      | built-in
_pickle                        | built-in
_posixsubprocess               | built-in
_random                        | built-in
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
246: <class '_frozen_importlib.SourceFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__future__                     | /usr/lib/python3.4/__future__.py
_bootlocale                    | /usr/lib/python3.4/_bootlocale.py
_collections_abc               | /usr/lib/python3.4/_collections_abc.py
_compat_pickle                 | /usr/lib/python3.4/_compat_pickle.py
_dummy_thread                  | /usr/lib/python3.4/_dummy_thread.py
_markupbase                    | /usr/lib/python3.4/_markupbase.py
_osx_support                   | /usr/lib/python3.4/_osx_support.py
_pyio                          | /usr/lib/python3.4/_pyio.py
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
44: <class '_frozen_importlib.ExtensionFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_bz2                           | /usr/lib/python3.4/lib-dynload/_bz2.cpython-34m-x86_64-linux-gnu.so
_codecs_cn                     | /usr/lib/python3.4/lib-dynload/_codecs_cn.cpython-34m-x86_64-linux-gnu.so
_codecs_hk                     | /usr/lib/python3.4/lib-dynload/_codecs_hk.cpython-34m-x86_64-linux-gnu.so
_codecs_iso2022                | /usr/lib/python3.4/lib-dynload/_codecs_iso2022.cpython-34m-x86_64-linux-gnu.so
_codecs_jp                     | /usr/lib/python3.4/lib-dynload/_codecs_jp.cpython-34m-x86_64-linux-gnu.so
_codecs_kr                     | /usr/lib/python3.4/lib-dynload/_codecs_kr.cpython-34m-x86_64-linux-gnu.so
_codecs_tw                     | /usr/lib/python3.4/lib-dynload/_codecs_tw.cpython-34m-x86_64-linux-gnu.so
_crypt                         | /usr/lib/python3.4/lib-dynload/_crypt.cpython-34m-x86_64-linux-gnu.so
(****************************truncated*******************************)

Ответ 18

Если у вас установлен дистрибутив anaconda python, вы также можете использовать

$conda list

в дополнение к решениям, описанным выше.

Ответ 19

Попробуйте это

pip list

или же

pip freeze

Ответ 20

pip freeze делает все, чтобы найти пакеты, однако можно просто написать следующую команду, чтобы перечислить все пути, в которых находятся пакеты python.

>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

Ответ 21

Есть много способов снять кожу с кошки.

  • Самый простой способ - использовать функцию pydoc непосредственно из оболочки:
    pydoc modules

  • Но для получения дополнительной информации используйте инструмент под названием pip-date, который также сообщит вам даты установки.
    pip install pip-date


enter image description here

Ответ 22

Есть много идей, вначале я размышляю над этими двумя:

зернышко

минусы: не всегда установлены

помочь ( "модули")

минусы: вывод на консоль; со сломанными модулями (см. Ubuntu...) можно segfault

Мне нужен простой подход, использующий базовые библиотеки и совместимый со старым Python 2.x

И я вижу свет: listmodules.py

В каталоге исходных текстов документации в 2.5 скрыт небольшой скрипт, в котором перечислены все доступные модули для установки на Python.

Плюсы:

использует только imp, sys, os, re, time

предназначен для работы на Python 1.5.2 и новее

исходный код действительно компактен, так что вы можете легко переделать его, например, передать список исключений с ошибочными модулями (не пытайтесь импортировать их)

Ответ 23

Мне нужно было найти конкретную версию пакетов, доступных по умолчанию в AWS Lambda. Я сделал это с коллажем идей с этой страницы. Я делюсь этим для потомков.

import pkgutil

__version__ = '0.1.1'

def get_ver(name):
    try:
        return str(__import__(name).__version__)
    except:
        return None

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'body': [{
                   'path': m.module_finder.path,
                   'name': m.name,
                   'version': get_ver(m.name),
                 } for m in list(pkgutil.iter_modules())
                 #if m.module_finder.path == "/var/runtime" # Uncomment this if you only care about a certain path
                ],
    }

Я обнаружил, что предоставленная библиотека boto3 устарела, и я не виноват, что мой код не работает. Мне просто нужно было добавить boto3 и botocore в мой проект. Но без этого я бы бился головой, думая, что мой код плохой.

{
  "statusCode": 200,
  "body": [
    {
      "path": "/var/task",
      "name": "lambda_function",
      "version": "0.1.1"
    },
    {
      "path": "/var/runtime",
      "name": "bootstrap",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "boto3",
      "version": "1.9.42"
    },
    {
      "path": "/var/runtime",
      "name": "botocore",
      "version": "1.12.42"
    },
    {
      "path": "/var/runtime",
      "name": "dateutil",
      "version": "2.7.5"
    },
    {
      "path": "/var/runtime",
      "name": "docutils",
      "version": "0.14"
    },
    {
      "path": "/var/runtime",
      "name": "jmespath",
      "version": "0.9.3"
    },
    {
      "path": "/var/runtime",
      "name": "lambda_runtime_client",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "lambda_runtime_exception",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "lambda_runtime_marshaller",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "s3transfer",
      "version": "0.1.13"
    },
    {
      "path": "/var/runtime",
      "name": "six",
      "version": "1.11.0"
    },
    {
      "path": "/var/runtime",
      "name": "test_bootstrap",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "test_lambda_runtime_client",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "test_lambda_runtime_marshaller",
      "version": null
    },
    {
      "path": "/var/runtime",
      "name": "urllib3",
      "version": "1.24.1"
    },
    {
      "path": "/var/lang/lib/python3.7",
      "name": "__future__",
      "version": null
    },
...

То, что я обнаружил, также отличалось от того, что они официально публикуют. На момент написания этого:

  • Операционная система - Amazon Linux
  • AMI - amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2
  • Ядро Linux - 4.14.77-70.59.amzn1.x86_64
  • AWS SDK для JavaScript - 2.290.0\
  • SDK для Python (Boto 3) - 3-1.7.74 botocore-1.10.74

Ответ 24

Если вы используете Python 3

Я только что попробовал на Ubuntu, и, похоже, сработало

Debian/Ubuntu: sudo apt-get install python3-matplotlib

Fedora: sudo dnf install python3-matplotlib

Red Hat: sudo yum install python3-matplotlib

Арка: sudo pacman -S python-matplotlib

Источник: https://matplotlib.org/users/install.html

Ответ 25

Для тех, кто интересуется, как вызвать pip list из программы Python, вы можете использовать следующее:

import pip
pip.main(['list])  # this will print all the packages

Ответ 26

Это поможет

В терминале или IPython введите:

help('modules')

затем

In [1]: import                      #import press-TAB
Display all 631 possibilities? (y or n)
ANSI                   audiodev               markupbase
AptUrl                 audioop                markupsafe
ArgImagePlugin         avahi                  marshal
BaseHTTPServer         axi                    math
Bastion                base64                 md5
BdfFontFile            bdb                    mhlib
BmpImagePlugin         binascii               mimetools
BufrStubImagePlugin    binhex                 mimetypes
CDDB                   bisect                 mimify
CDROM                  bonobo                 mmap
CGIHTTPServer          brlapi                 mmkeys
Canvas                 bsddb                  modulefinder
CommandNotFound        butterfly              multifile
ConfigParser           bz2                    multiprocessing
ContainerIO            cPickle                musicbrainz2
Cookie                 cProfile               mutagen
Crypto                 cStringIO              mutex
CurImagePlugin         cairo                  mx
DLFCN                  calendar               netrc
DcxImagePlugin         cdrom                  new
Dialog                 cgi                    nis
DiscID                 cgitb                  nntplib
DistUpgrade            checkbox               ntpath

Ответ 27

Установка

pip install pkgutil

код

import pkgutil

for i in pkgutil.iter_modules(None): # returns a tuple (path, package_name, ispkg_flag)
    print(i[1]) #or you can append it to a list

Пример вывода:

multiprocessing
netrc
nntplib
ntpath
nturl2path
numbers
opcode
pickle
pickletools
pipes
pkgutil

Ответ 28

Для устаревших модулей попробуйте (Windows)

pip list --outdated

Ответ 29

Из оболочки

ls site-packages

Если это не поможет, вы можете сделать это.

import sys
import os
for p in sys.path:
    print os.listdir( p )

И посмотрим, что это производит.