Я хотів би отримати список модулів Python, які знаходяться в моїй установці Python (сервер UNIX).
Як можна отримати список модулів Python, встановлених на вашому комп'ютері?
Я хотів би отримати список модулів Python, які знаходяться в моїй установці Python (сервер UNIX).
Як можна отримати список модулів Python, встановлених на вашому комп'ютері?
Відповіді:
Мої 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 repo с 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.
Ми BEHAVE років setup.py
в /tmp/behave
:
(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Встановіть пакет python з git repo
(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
.
Я не зміг знайти жодної посилання на це питання в документації. Можливо, я відкрию для цього помилку.
import pkg_resources; installed_packages = [(d.project_name, d.version) for d in pkg_resources.working_set]
AttributeError: module 'pip' has no attribute 'get_installed_distributions'
.
help('modules')
в оболонці / підказці Python.
pydoc modules
працює. Ви повинні подати це як відповідь.
python -c 'help("modules")'
Тепер ці методи я спробував сам, і я отримав саме те, що було рекламовано: Усі модулі.
На жаль, насправді вам не дуже хвилюється 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
Я кажу "напрочуд", тому що інструмент для встановлення пакунків - саме те місце, де можна було б знайти цю функціональність, хоча не під назвою "заморозити", але упаковка пітона настільки дивна, що я здивований, що цей інструмент має сенс. Піп 0.8.2, Python 2.7.
Починаючи з pip версії 1.3, ви отримаєте доступ до:
pip list
Який, здається, синтаксичний цукор для "заморозки піп". У ньому буде перераховано всі модулі, що стосуються вашої установки чи virtualenv, а також їхні версії номерів. На жаль, він не відображає номер поточної версії жодного модуля, а також не миє посуд та не вбирає взуття.
pip list
є найпростішим і найкращим. Ось варіанти та деталі.
У ipython
ви можете ввести « import
Tab».
У стандартному інтерпретаторі Python ви можете набрати " help('modules')
".
У командному рядку ви можете використовувати .pydoc
modules
У сценарії дзвоніть pkgutil.iter_modules()
.
pkgutil.iter_modules()
працює, розклад піп-файлів вище не містить усіх пакетів, лише встановлені через pip.
python -c 'import pkgutil;print [x[1] for x in list(pkgutil.iter_modules())]'
. Він повинен скидати всі назви модулів як один дійсно великий список Python. x[1]
Біт використовується зривати ім'я модуля з кортежів , що генеруються pkgutil.iter_modules()
.
Я просто використовую це для перегляду використовуваних модулів:
import sys as s
s.modules.keys()
який показує всі модулі, що працюють на вашому python.
Для всіх вбудованих модулів використовуйте:
s.modules
Який дикт, що містить усі модулі та об’єкти імпорту.
pydoc
ні pip
встановлених (NAS в моєму випадку).
help('modules')
просто висить без відповіді для мене. Але цей підхід із sys
ідеально працює
У звичайній оболонці просто використовувати
pydoc modules
py -m pydoc modules
в cmd або Powershell.
pydoc modules
не працював для мене в Windows 10 з Python 3.6, але модифікація @VKK: py -m pydoc modules
працює в cmd / Powershell.
Станом на п. 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 freeze
; глибина моїх знань з цієї теми досить обмежена. Я начебто зіпсував свій шлях до рішення, коли прийнята відповідь не працювала для мене, і я спробував поєднати її з відповіддю, пов’язаною з цим, setuptools
і змусив його працювати.
get_installed_distributions routine
.
setuptools
.
Я зазвичай використовую pip list
для отримання списку пакетів (з версією).
Звичайно, це працює і у віртуальному середовищі. Щоб показати, що встановлено лише у віртуальному середовищі (не у глобальних пакетах), використовуйте pip list --local
.
Ось документація, що показує всі доступні pip list
варіанти, з кількома хорошими прикладами.
Дуже простий пошук, використовуючи 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]
for m in iter_modules()
і це також спрацювало.
Я наткнувся на встановлений на ПК python 2.7 на OS X. Це вимагало X11, щоб перелічити встановлені модулі (як за допомогою довідки, так і pydoc).
Щоб мати можливість перелічити всі модулі без установки X11, я запустив pydoc як http-сервер, тобто:
pydoc -p 12345
Тоді можна направити Safari, http://localhost:12345/
щоб побачити всі модулі.
У терміналі або 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
Це рішення є основним на основі модулів importlib
і pkgutil
працює з CPython 3.4 та CPython 3.5, але не підтримує CPython 2.
Пояснення
sys.builtin_module_names
- називає всі вбудовані модулі (дивіться мою відповідь тут )pkgutil.iter_modules()
- повертає інформацію про всі доступні модуліimportlib.util.find_spec()
- повертає інформацію про модуль імпорту, якщо він існуєBuiltinImporter
- імпортер для вбудованих модулів ( документів )SourceFileLoader
- імпортер для стандартного модуля Python (за замовчуванням має розширення * .py) ( документи )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*******************************)
pip
управління пакунками, яка використовується для встановлення та управління програмними пакетами, написаними на Python, і в результаті pip.get_installed_distributions()
повертає модулі, встановлені разом з піп. Моя відповідь повністю базується на стандартній бібліотеці Python і охоплює всі модулі, доступні для імпорту. Найбільший недолік моєї відповіді - немає підтримки для CPython 2.
**truncated**
, де результат врізаний. Можливо, ви не обережні, але якщо це не так, щоб надіслати мені інформацію про вашу систему та реалізацію Python, я проведу додаткові дослідження для її виправлення.
Попередження: Адам Матан перешкоджає цьому використанню в pip> 10.0. Також читайте коментар @ sinoroc нижче
Це був натхненний Адама Матан в відповідь (прийнятий один):
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
і один раз, один має перевагу, так що інший не буде вказаний у списку (відображається лише одне місцезнаходження). Я вважаю, що тоді перераховується лише той, який знаходиться в локальному каталозі. Це можна вдосконалити.
pip
один раз, а потім вийти з нього. Здається, це більше проблема, яка може змінити поведінку.
_internal
). Загалом, це, очевидно, працює, але це погана практика. Є кращі альтернативи, деякі - в інших відповіді на це питання.
Крім використання, pip freeze
я встановлював жовток у своїх віртуальних середовищах.
Якщо у вас встановлено розподілення анаконди пітона , ви також можете використовувати
$conda list
крім описаних вище розчинів.
conda install
, він повинен працювати :)
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
/usr/bin/python
чи той, хто походить з python.org ? Для колишнього я можу користуватися sys.modules
без проблем.
system.modules
замість цього sys.modules
.
Виконайте наступне у своєму редакторі python або IPython
import pkg_resources;
installed_packages = {d.project_name: d.version for d in pkg_resources.working_set}
print(installed_packages)
Прочитайте інші відповіді та зібравши це комбо, яке найшвидше і простіше всередині Python
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
Є багато ідей, спочатку я розмірковую над цими двома:
піп
мінуси: не завжди встановлюється
help ("модулі")
мінуси: вихід на консоль; зі зламаними модулями (див. ubuntu ...) може бути за замовчуванням
Мені потрібен простий підхід, використовуючи базові бібліотеки та сумісні зі старим python 2.x
І я бачу світло: listmodules.py
Прихований у каталозі джерел документації в 2.5 - невеликий скрипт, в якому перераховані всі доступні модулі для установки Python.
Плюси:
використовує лише imp, sys, os, re, time
розроблений для роботи на Python 1.5.2 та новіших версій
вихідний код дійсно компактний, тому ви можете легко повозитися з ним, наприклад, передати список виключень баггі-модулів (не намагайтеся імпортувати їх)
Мені потрібно було знайти конкретну версію пакетів, доступних за замовчуванням в 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 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
Ось рішення з кодом 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 list
з програми Python, ви можете скористатися наступним:
import pip
pip.main(['list]) # this will print all the packages
З оболонки
ls site-packages
Якщо це не корисно, ви можете це зробити.
import sys
import os
for p in sys.path:
print os.listdir( p )
І подивіться, що це дає.