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

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

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

34 ответа

Решение

Решение

Мои 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,

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

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

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

help('modules')

в оболочке / приглашении Python.

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

Увы, на самом деле вас не волнует 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

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

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

pip list

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

  • В ipython вы можете напечатать import Вкладка ".

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

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

  • В сценарии вызовите pkgutil.iter_modules(),

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

import sys as s
s.modules.keys()

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

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

s.modules

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

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

pydoc modules

Начиная с пункта 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.

Работает независимо от версии Pip

Выполните в редакторе Python или IPython следующее:

import pkg_resources; 
installed_packages = {d.project_name: d.version for d in pkg_resources.working_set}
print(installed_packages)

Прочтите другие ответы и составьте эту комбинацию, которая является самой быстрой и простой внутри Python.

Найти конкретные пакеты

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

installed_packages['pandas'] >> '1.16.4'

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

>>help('modules package')

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

Конечно, это работает и в виртуальной среде.

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

pip list

или же

pip freeze

Это поможет

В терминале или 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

Очень простой поиск с использованием 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]

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

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

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

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

pydoc -p 12345

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

Это решение основано на модулях 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`s 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*******************************)

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

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 pi@rpi-v3 [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 и один раз без, один имеет приоритет, так что другой не отображается в списке (отображается только одно местоположение). Я полагаю, что в списке будет указан только один из них в локальном каталоге. Это может быть улучшено.

Я сравниваю пять методов извлечения установленных «модулей», все из которых я видел в этой теме.

Краткое содержание

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

Связанные предостережения

  • Дистрибутивы, пакеты и модули часто имеют одинаковые имена, поэтому их легко перепутать.
  • importlib.util.find_specпредназначен для модулей и чувствителен к регистру.
  • sys.modulesперечислены только импортированные модули.

Распределения

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

Установленный дистрибутив не всегда можно импортировать под тем же именем. Напримерpip install Pillowимпортируется сimport PIL. Иногда дистрибутив даже позволяет импортировать несколько модулей.

Методы (Каждый столбец по порядку)

iter_modules

      import pkgutil
{module.name for module in pkgutil.iter_modules()}

help("modules") (Выводит только в терминале)

      help("modules")

встроенные_имя_модуля

      import sys
set(sys.builtin_module_names)

список пипсов (печатает только в терминале)

pip listв терминале

рабочий_набор

      import pkg_resources
{pkg.key for pkg in pkg_resources.working_set}

Заключение

      import sys
import pkgutil

def get_installed_modules_names():
    iter_modules = {module.name for module in pkgutil.iter_modules()}
    builtin = sys.builtin_module_names
    return set.union(iter_modules, builtin)

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

$conda list

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

Помимо использования pip freeze Я устанавливал желток в моей виртуальной среде.

  1. чтобы получить все доступные модули, запустите sys.modules
  2. чтобы получить все установленные модули (читай: установлены 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

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

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

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

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

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


/image s/4de1a4081daebcc17b54867f5287c4345e17a2f7.png

Мне нужно было найти конкретную версию пакетов, доступных по умолчанию в 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
      pip install pip-chill 
pip-chill

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

зернышко

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

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

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

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

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

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

Плюсы:

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

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

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

Вот решение кода Python, которое вернет список установленных модулей. Можно легко изменить код, включив в него номера версий.

import subprocess
import sys
from pprint import pprint

installed_packages = reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze']).decode('utf-8')
installed_packages = installed_packages.split('\r\n')
installed_packages = [pkg.split('==')[0] for pkg in installed_packages if pkg != '']
pprint(installed_packages)

Установка

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

Если ничего из вышеперечисленного не помогает, значит, в моей среде произошел сбой из-за обновления системы, и я не смог обновить pip. Хотя он не даст вам точного списка, вы можете получить представление о том, какие библиотеки были установлены, просто заглянув внутрь вашего env> lib> python(версия здесь)> site-packages>. Здесь вы получите хорошее представление об установленных модулях.

Другие вопросы по тегам