Chciałbym uzyskać listę modułów Python, które są w mojej instalacji Python (serwer UNIX).
Jak uzyskać listę modułów Python zainstalowanych na komputerze?
Chciałbym uzyskać listę modułów Python, które są w mojej instalacji Python (serwer UNIX).
Jak uzyskać listę modułów Python zainstalowanych na komputerze?
Odpowiedzi:
Moje 50 centów za uzyskanie pip freeze
podobnej listy ze skryptu 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)
Jako (za długa) jedna wkładka:
sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
Dający:
['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']
To rozwiązanie stosuje się do zakresu systemu lub zakresu wirtualnego środowiska i obejmuje pakiety instalowane setuptools
, pip
oraz ( nie daj Boże ) easy_install
.
Dodałem wynik tego wywołania do mojego serwera flask, więc kiedy go http://example.com/exampleServer/environment
wywołuję, otrzymuję listę pakietów zainstalowanych na virtualenv serwera. Ułatwia to debugowanie.
Zauważyłem dziwne zachowanie tej techniki - gdy interpreter Pythona jest wywoływany w tym samym katalogu co setup.py
plik, nie wyświetla pakietu zainstalowanego przez 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) $
Sklonuj repozytorium git za pomocą 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.
Zachowujemy się setup.py
w /tmp/behave
:
(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Zainstaluj pakiet python z repozytorium 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
brakuje drugim przykładzie, ponieważ katalog roboczy zawiera behave
„s setup.py
pliku.
W dokumentacji nie znalazłem żadnego odniesienia do tego problemu. Być może otworzę dla tego błąd.
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')
w powłoce Pythona / znaku zachęty.
pydoc modules
działa. Powinieneś przesłać go jako odpowiedź.
python -c 'help("modules")'
Teraz te metody wypróbowałem sam i dostałem dokładnie to, co było reklamowane: wszystkie moduły.
Niestety, naprawdę nie obchodzi cię stdlib, wiesz, co otrzymujesz z instalacją Pythona.
Naprawdę, chcę rzeczy, które mam zainstalowane.
Co zaskakujące, zadziałało dobrze:
pip freeze
Który zwrócił:
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
Mówię „zaskakująco”, ponieważ narzędzie do instalowania pakietów jest dokładnie tym miejscem, w którym można się spodziewać tej funkcjonalności, chociaż nie pod nazwą „zamrozić”, ale opakowanie Pythona jest tak dziwne, że jestem zaskoczony, że to narzędzie ma sens. Pip 0.8.2, Python 2.7.
Od wersji PIP 1.3 masz dostęp do:
pip list
Który wydaje się być cukrem syntaktycznym do „zamrażania pip”. Spowoduje to wyświetlenie listy wszystkich modułów związanych z Twoją instalacją lub virtualenv, wraz z ich numerami wersji. Niestety nie wyświetla bieżącego numeru wersji żadnego modułu, ani nie myje naczyń ani nie połyskuje butów.
pip list --local
możliwość rozróżnienia między virtualenv
globalnymi pakietami witryn, omówionymi tutaj .
pip list
jest najprostszy i najlepszy. Oto opcje i szczegóły.
W ipython
można wpisać „ import
Tab”.
W standardowym interpretatorze Pythona możesz wpisać „ help('modules')
”.
W wierszu polecenia możesz użyć .pydoc
modules
W skrypcie zadzwoń pkgutil.iter_modules()
.
pkgutil.iter_modules()
działa, powyższe rozwiązanie pip nie wyświetla wszystkich pakietów, tylko te zainstalowane przez pip.
python -c 'import pkgutil;print [x[1] for x in list(pkgutil.iter_modules())]'
. Powinien zrzucić wszystkie nazwy modułów jako jedną naprawdę dużą listę Pythona. x[1]
Bit jest używany do wyrywania nazwę moduł z generowanych przez krotki pkgutil.iter_modules()
.
Po prostu używam tego, aby zobaczyć aktualnie używane moduły:
import sys as s
s.modules.keys()
który pokazuje wszystkie moduły działające na twoim pythonie.
Do wszystkich wbudowanych modułów użyj:
s.modules
Który jest dyktorem zawierającym wszystkie moduły i importowane obiekty.
pydoc
nie zostały pip
zainstalowane (w moim przypadku NAS).
help('modules')
po prostu wisi dla mnie bez odpowiedzi. Ale to podejście sys
działa doskonale
W normalnej powłoce po prostu użyj
pydoc modules
py -m pydoc modules
w cmd lub PowerShell.
pydoc modules
nie działało dla mnie w Windows 10 z Python 3.6, ale modyfikacja @VKK: py -m pydoc modules
działa w cmd / Powershell.
Począwszy od pip 10, zaakceptowana odpowiedź nie będzie już działać. Zespół programistów usunął dostęp do get_installed_distributions
procedury. Istnieje inna funkcja setuptools
do robienia tego samego. Oto alternatywna wersja, która działa z pipem 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)
Daj mi znać, czy będzie działać, czy też nie, w poprzednich wersjach pipa.
pip freeze
; głębokość mojej wiedzy na ten temat jest raczej ograniczona. W pewnym sensie pogrzebałem drogę do rozwiązania, gdy zaakceptowana odpowiedź nie działała dla mnie i próbowałem połączyć ją z odpowiedzią związaną z tym setuptools
i sprawić, że zadziałała.
get_installed_distributions routine
.
setuptools
.
Zwykle używam pip list
aby uzyskać listę pakietów (z wersją).
Oczywiście działa to również w środowisku wirtualnym. Aby pokazać, co jest zainstalowane tylko w środowisku wirtualnym (nie w pakietach globalnych), użyj pip list --local
.
Oto dokumentacja pokazująca wszystkie dostępne pip list
opcje, z kilkoma dobrymi przykładami.
Bardzo proste wyszukiwanie przy użyciu 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()
i to też działało.
Wpadłem na niestandardowo zainstalowanego Pythona 2.7 w OS X. Wymagało X11, aby wyświetlić listę zainstalowanych modułów (zarówno za pomocą pomocy, jak i pydoc).
Aby móc wyświetlić listę wszystkich modułów bez instalowania X11, uruchomiłem pydoc jako serwer http, tj .:
pydoc -p 12345
Następnie można skierować Safari, http://localhost:12345/
aby wyświetlić wszystkie moduły.
W terminalu lub IPython wpisz:
help('modules')
następnie
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
To rozwiązanie jest oparte na modułach importlib
i pkgutil
działa z CPython 3.4 i CPython 3.5, ale nie obsługuje CPython 2.
Wyjaśnienie
sys.builtin_module_names
- nazywa wszystkie wbudowane moduły (spójrz na moją odpowiedź tutaj )pkgutil.iter_modules()
- zwraca informację o wszystkich dostępnych modułachimportlib.util.find_spec()
- zwraca informację o module importu, jeśli istniejeBuiltinImporter
- importer wbudowanych modułów ( dokumentów )SourceFileLoader
- importer standardowego modułu Python (domyślnie ma rozszerzenie * .py) ( docs )ExtensionFileLoader
- importer modułów jako biblioteka współdzielona (napisany w C lub C ++)Pełny kod
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()
Stosowanie
Dla CPython3.5 (obcięty)
$ 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*******************************)
Dla CPython3.4 (obcięty)
$ 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
- systemie zarządzania pakietami używanym do instalowania i zarządzania pakietami oprogramowania napisanymi w Pythonie, a wynik pip.get_installed_distributions()
zwraca moduły zainstalowane z pipem. Moja odpowiedź w całości oparta jest na standardowej bibliotece Pythona i obejmuje wszystkie moduły dostępne do importu. Największa wada mojej odpowiedzi - brak wsparcia dla CPython 2.
**truncated**
, gdy dane wyjściowe są obcinane. Może nie jesteś ostrożny, ale jeśli tak nie jest, więc aby przesłać mi informacje o twoim systemie i implementacji Pythona, przeprowadzę dodatkowe badania, aby to naprawić.
Ostrzeżenie: Adam Matan odradza takie użycie w pip> 10,0. Przeczytaj także komentarz @ sinoroc poniżej
To był inspirowany przez Adam Matan za odpowiedź (przyjętą jeden):
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))
który następnie drukuje tabelę w postaci
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
------------------------------------------- -------------- ------
co pozwala łatwo rozpoznać, które pakiety zostały zainstalowane zi bez sudo
.
Uwaga na bok: zauważyłem, że kiedy instaluję pakiet raz za pośrednictwem sudo
i raz bez niego, jeden ma pierwszeństwo, aby drugiego nie było na liście (wyświetlana jest tylko jedna lokalizacja). Uważam, że na liście znajduje się tylko ten z katalogu lokalnego. Można to poprawić.
pip
jednorazowe użycie, a następnie zamknięcie. Wygląda na to, że zachowanie może zmienić problem.
_internal
). W sumie to oczywiście działa, ale jest złą praktyką. Istnieją lepsze alternatywy, niektóre znajdują się w innych odpowiedziach na to pytanie.
Oprócz używania pip freeze
instalowałem żółtko w moich wirtualnych środowiskach.
Jeśli masz zainstalowaną dystrybucję python anakonda , możesz również użyć
$conda list
oprócz rozwiązań opisanych powyżej.
conda install
, powinien działać :)
sys.modules
pip
), możesz spojrzeć napip.get_installed_distributions()
W drugim celu przykładowy kod:
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
czy ten pochodzi z python.org ? W przypadku tego pierwszego mogę używać sys.modules
bez problemu.
system.modules
zamiast sys.modules
.
Uruchom następujące polecenie w edytorze Python lub IPython
import pkg_resources;
installed_packages = {d.project_name: d.version for d in pkg_resources.working_set}
print(installed_packages)
Przeczytaj inne odpowiedzi i zbierz razem to połączenie, które jest najszybsze i najłatwiejsze w Pythonie
pip freeze robi wszystko, szukając pakietów, jednak można po prostu napisać następującą komendę, aby wyświetlić listę wszystkich ścieżek, w których znajdują się pakiety Pythona.
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
Istnieje wiele pomysłów, początkowo zastanawiam się nad tymi dwoma:
pypeć
Wady: nie zawsze instalowane
pomoc („moduły”)
Minusy: wyjście do konsoli; z uszkodzonymi modułami (patrz ubuntu ...) może segfault
Potrzebuję łatwego podejścia, używając podstawowych bibliotek i kompatybilnych ze starym Pythonem 2.x.
I widzę światło: listmodules.py
W katalogu źródłowym dokumentacji w wersji 2.5 ukryty jest mały skrypt, który wyświetla listę wszystkich dostępnych modułów do instalacji Pythona.
Plusy:
używa tylko imp, sys, os, re, time
zaprojektowany do działania w Pythonie 1.5.2 i nowszych
kod źródłowy jest naprawdę kompaktowy, więc możesz łatwo z nim majstrować, na przykład, aby przekazać listę wyjątków błędnych modułów (nie próbuj ich importować)
Musiałem znaleźć konkretną wersję pakietów dostępnych domyślnie w AWS Lambda. Zrobiłem to z mieszanką pomysłów z tej strony. Udostępniam to dla potomności.
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
],
}
Odkryłem, że dostarczona biblioteka boto3 była bardzo nieaktualna i to nie moja wina, że mój kod zawiódł. Po prostu potrzebowałem dodać boto3 i botocore do mojego projektu. Ale bez tego waliłbym się w głowę, sądząc, że mój kod jest zły.
{
"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
},
...
To, co odkryłem, różniło się również od tego, co oficjalnie publikują . W momencie pisania tego:
- System operacyjny - Amazon Linux
- AMI - amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2
- Jądro Linux - 4.14.77-70.59.amzn1.x86_64
- AWS SDK dla JavaScript - 2.290.0 \
- SDK dla Python (Boto 3) - 3-1.7.74 botocore-1.10.74
Instalacja
pip install pkgutil
Kod
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
Przykładowe dane wyjściowe:
multiprocessing
netrc
nntplib
ntpath
nturl2path
numbers
opcode
pickle
pickletools
pipes
pkgutil
Oto rozwiązanie kodu python, które zwróci listę zainstalowanych modułów. Można łatwo zmodyfikować kod, aby zawierał numery wersji.
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)
Dla każdego, kto zastanawia się, jak zadzwonić pip list
z programu w języku Python, można użyć następujących opcji:
import pip
pip.main(['list]) # this will print all the packages
Z muszli
ls site-packages
Jeśli to nie pomoże, możesz to zrobić.
import sys
import os
for p in sys.path:
print os.listdir( p )
I zobacz, co to produkuje.