możesz po prostu >>> help (), a następnie >>> moduły
Julius Naeumann
1
Czy jest alternatywa? help () wisi dla mnie.
Paulo Carvalho
2
Wiele z tych odpowiedzi zakłada, że masz dostęp do wiersza poleceń. Jeśli używasz AWS Lambda, musisz zrobić to wszystko z poziomu Pythona. Zobacz stackoverflow.com/a/54939905/117471
Bruno Bronosky
Odpowiedzi:
610
Rozwiązanie
Nie używaj z pipem> 10,0!
Moje 50 centów za uzyskanie pip freezepodobnej 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()])
To rozwiązanie stosuje się do zakresu systemu lub zakresu wirtualnego środowiska i obejmuje pakiety instalowane setuptools, piporaz ( nie daj Boże ) easy_install.
Mój przypadek użycia
Dodałem wynik tego wywołania do mojego serwera flask, więc kiedy go http://example.com/exampleServer/environmentwywołuję, otrzymuję listę pakietów zainstalowanych na virtualenv serwera. Ułatwia to debugowanie.
Ostrzeżenia
Zauważyłem dziwne zachowanie tej techniki - gdy interpreter Pythona jest wywoływany w tym samym katalogu co setup.pyplik, nie wyświetla pakietu zainstalowanego przez setup.py.
Kroki ku reprodukcji:
Utwórz wirtualne środowisko
$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $
(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.eggFinished processing dependencies for behave==1.2.5a1
Jeśli uruchomimy wyżej wymienione rozwiązanie z /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'
Jeśli uruchomimy wyżej wymienione rozwiązanie z /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.5a1brakuje drugim przykładzie, ponieważ katalog roboczy zawiera behave„s setup.pypliku.
W dokumentacji nie znalazłem żadnego odniesienia do tego problemu. Być może otworzę dla tego błąd.
Dziękuję za tę odpowiedź! Myślę, że lepiej odpowiedzieć na pytanie, ponieważ pytam „lokalnie” zainstalowane moduły Pythona. Zamrożenie pipa nie zawsze jest właściwą drogą. To działa lepiej - tak myślę.
Léo Léopold Hertz
3
@Masi Właśnie dodał szczegółowe wyjaśnienie dotyczące zastrzeżenia tego rozwiązania. To jest naprawdę dziwne.
Adam Matan
21
Alternatywa:import pkg_resources; installed_packages = [(d.project_name, d.version) for d in pkg_resources.working_set]
ebolyen
14
Począwszy od pip 10, ta odpowiedź nie będzie już działać. Komentarz od @ebolyen pokazuje alternatywne polecenia, które działają. Doszedłem do tego samego wniosku i zamieściłem poniżej pełny poprawiony kod.
Big_Al_Tx
5
W najnowszych wersjach pipa to nie działa, co powoduje wyświetlenie komunikatu o błędzie AttributeError: module 'pip' has no attribute 'get_installed_distributions'.
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.
Myślę, że nazwa kryje się za tym, że otrzymujesz „zamrożoną” migawkę tego, co jest teraz zainstalowane, którą możesz później przesłać do pip, aby uzyskać dokładnie te same moduły zainstalowane w innym środowisku.
Ryan C. Thompson,
Arash, możesz także zainstalować pip w systemie Windows! Najpierw zainstaluj setuptools, a następnie użyj easy_install, aby zainstalować pip :)
gawbul
Jest to doskonałe, ale wydaje się, że brakuje niektórych zainstalowanych bibliotek. Na przykład nie wyświetla PyQt.
to działa. Co to jest python bałagan. Dlaczego nie mogą zebrać się w sobie i wymyślić rozwiązań podobnych do tych, które istnieją w Railsach? (Gemfile, bundler, rvm)
Dimitris,
106
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.
pkgutil.iter_modules()działa, powyższe rozwiązanie pip nie wyświetla wszystkich pakietów, tylko te zainstalowane przez pip.
metaperture
2
Niesamowite! Myślę, że poprawili dokumentację, odkąd zadano to pytanie. Moduł pydoc spam przeszukuje spam w dokumentach modułów. Ostatni punkt wydaje się dostarczać wystarczających informacji do korzystania z modułu. @metaperture Czy możesz podać przykład, w jaki sposób wyświetlasz listę wszystkich zainstalowanych modułów lokalnych (a nie ogromną listę stlib przy pomocy („modułów”)) autorstwa pkgutil.iter_modules () .
Léo Léopold Hertz
2
@ LéoLéopoldHertz 준영 Spróbuj fragment: 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().
Philip Conrad,
76
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.
# Po zaimportowaniu sys „import sys as s” możesz wydrukować za pomocą: print sys.modules.keys ()
Dan Evans
Nie jestem pewien, dlaczego mój post był edytowany, ale dziękuję za skorzystanie z informacji, które opublikowałem, aby poprawić błędy we wcześniejszych postach. Zwrócisz błędy, jeśli użyjesz help () vs help (''). Dotyczy to również dir ('') i sys ('') itp. Mam nadzieję, że to pomaga i nie jest usuwane.
Dan Evans
Zignoruj mój ostatni post, ten post nie był edytowany. Miałem na myśli podobny post znaleziony tutaj: stackoverflow.com/questions/139180/... Przepraszam za zamieszanie.
Dan Evans
7
Pozytywnie oceniany, ponieważ jest to jedyna metoda, która wydaje się działać na systemach z ograniczeniami, które nie mają ani pydocnie zostały pipzainstalowane (w moim przypadku NAS).
Thomas
1
Zgadzam się z Thomasem. Korzystam na przykład z repl.it, który jest również ograniczonym rodzajem środowiska. help('modules')po prostu wisi dla mnie bez odpowiedzi. Ale to podejście sysdziała doskonale
Wygląda na to, że powyższe działa tylko na platformach 'nix. W każdym razie znalazłem i uruchomiłem skrypt, dostosowując polecenie w następujący sposób: c: \ bin \ pythos_2.7 \ lib \ pydoc.py moduły - ta lista trwała wieczność, format jest do bani i pomija zainstalowaną wersję numer. Zdam
David A. Gray
2
@ DavidA.Gray Właśnie wypróbowałem to na komputerze z systemem Windows z Python 3, i faktycznie działa. Za pomocą programu uruchamiającego Windows w Pythonie możesz to zrobić py -m pydoc modulesw cmd lub PowerShell.
VKK
pydoc modulesnie działało dla mnie w Windows 10 z Python 3.6, ale modyfikacja @VKK: py -m pydoc modulesdziała w cmd / Powershell.
Martin
41
Począwszy od pip 10, zaakceptowana odpowiedź nie będzie już działać. Zespół programistów usunął dostęp do get_installed_distributionsprocedury. Istnieje inna funkcja setuptoolsdo 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.
Szukałem tego rozwiązania i załamałem mózg, próbując znaleźć pkg_resources. Gdybym mógł to głosować więcej niż raz, zrobiłbym to. Dziękuję, @Big_Al_Tx! Aktualizacja: Z wyjątkiem .... kiedy wykonuję „zamrażanie pip” w moim środowisku wirtualnym i porównuję go z wynikiem tego, brakuje pakietów. Wszelkie przemyślenia na temat tego, dlaczego tak się mogło stać?
numberwhun
@numberwhun - Cieszę się, że to działało dla Ciebie. Przepraszam, ale nie mam odpowiedzi na rozbieżności z 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 setuptoolsi sprawić, że zadziałała.
@ bl79 - Myślę, że to jest dokładnie to miejsce, do którego mam referencje setuptools.
Big_Al_Tx
@Big_Al_Tx: Cóż, w pewnym sensie pracowałem nad opcją setuptools (którą można było zaciemnić dla moich potrzeb) i poszedłem z tym: install_pkgs = subprocess.check_output (['pip', 'freeze']) Robi dokładnie to, co ja musiałem to zrobić .... Tak !!
numer w czwartek
26
Jeśli musimy wyświetlić listę zainstalowanych pakietów w powłoce Pythona, możemy użyć helppolecenia w następujący sposób
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 listopcje, z kilkoma dobrymi przykładami.
Działa to dla mnie przy użyciu: python3 -m pip freeze - dla python 3.5.3.
dpminusa,
Działa to dobrze i nie musisz znajdować się w katalogu libs, jeśli twoje zmienne są zdefiniowane
mcy
12
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.
import sys
import os
import shutil
import pkgutil
import importlib
import collections
if sys.version_info.major ==2:raiseNotImplementedError('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 modulesfor 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 yetif module.loader notin 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 modulesfor module_name in pkgutil.iter_modules():# ignore this moduleif 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 notin 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()
Zrozumienie, w jaki sposób twoje podejście jest lepsze / gorsze niż podejście Adama.
Léo Léopold Hertz 준영
1
@ Léo Léopold Hertz. Krótka odpowiedź: spróbuj sam w produkcji i sam wyciągnij wnioski. Długa odpowiedź: podejście Adama opiera się na 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.
PADYMKO
1
@ Léo Léopold Hertz się mylisz, robi to. Przetestowałem to na moim komputerze. Moja odpowiedź ma specjalne znaczenie **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ć.
PADYMKO
9
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))
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 sudoi 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ć.
@sinoroc Dziękujemy za zwrócenie na to uwagi. Punkty 1–3 wydają się nie mieć zastosowania do tego rozwiązania, ponieważ ten skrypt ma na celu wyłącznie pipjednorazowe użycie, a następnie zamknięcie. Wygląda na to, że zachowanie może zmienić problem.
Daniel F,
Uzgodnione powody, dla których nie ma publicznego interfejsu API, nie dotyczą tego konkretnego fragmentu kodu. Ale ponieważ pip nie jest zobowiązany do zagwarantowania publicznego interfejsu API, może swobodnie zmieniać swoje wewnętrzne interfejsy API, strukturę kodu itp. W późniejszym wydaniu, jak to już miało miejsce wcześniej. Dlatego ten kod ma try / wyjątkiem, aby złapać poprzednią reorganizację kodu wewnętrznego, która miała wyjaśnić, że wewnętrzne interfejsy API są wewnętrznymi interfejsami API, a nie publicznymi ( _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.
sinoroc,
1
ten skrypt nie zadziała, jeśli nie będzie tam modułu „pip”.
Alexander Stohr
8
Oprócz używania pip freezeinstalowałem żółtko w moich wirtualnych środowiskach.
Jeśli korzystasz z komputera z systemem UNIX / Mac OS X, otwórz terminal i po prostu wpisz conda install, powinien działać :)
Shreyas
Jestem na komputerze z systemem Windows 7. Znalazłem go na mojej ścieżce, ale plik conda.exe znajduje się w AppData \ Local \ Continuum \ Anaconda \ Scripts.
HuckIt
6
aby uzyskać wszystkie dostępne moduły, uruchom sys.modules
aby uzyskać wszystkie zainstalowane moduły (czytaj: zainstalowane przez 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
Polecenie sys.modules nie działa w Pythonie najnowszego OSX. NameError: nazwa „system” nie jest zdefiniowana .
Léo Léopold Hertz
@Masi Czy miałeś na myśli /usr/bin/pythonczy ten pochodzi z python.org ? W przypadku tego pierwszego mogę używać sys.modulesbez problemu.
yegle
Mam na myśli / usr / bin / python .
Léo Léopold Hertz 준영
@Masi Nie jestem pewien, czy nadal jesteś zainteresowany tym problemem. Najwyraźniej używasz system.moduleszamiast sys.modules.
yegle
Lol. Mój błąd polegał na tym, że pierwotnie nie importowałem pakietu sys. Zamiast tego uruchom zamiast tego zaimportuj sys; sys.modules działa zgodnie z oczekiwaniami.
Léo Léopold Hertz
6
Dla najnowszej wersji, takiej jak Pip 20
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.
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:returnNonedef 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.
który katalog pakietów witryn? Może to zrobić lepiej: ls / usr / {local /,} lib / python $ (python -V 2> & 1 | cut -d "" -f2 | cut -d. -F1-2) / site-packages
vezult
Nie będzie to również wyświetlać wbudowanych modułów ani modułów w niestandardowym PYTHONPATH, ani modułów zainstalowanych w „trybie programowania” setuptools itp.
dF.
Mój /usr/local/lib/python2.5/site-packages jest pusty, chociaż mam zainstalowane moduły.
Léo Léopold Hertz 준영
14
Wyrazy uznania za nieusunięcie tej zaniżonej odpowiedzi. Społeczność pomaga zrozumieć, dlaczego często uważa się, że odpowiedź jest błędna.
Jeremy Stein
1
@JeremyStein Lepszą strategią (bardziej pomocną i prawdopodobnie mniej szkodliwą dla powtórzeń) byłaby prawdopodobnie edycja pytania, aby wyjaśnić, dlaczego jest źle, gdy zostanie to wyjaśnione w komentarzach ...
Odpowiedzi:
Rozwiązanie
Nie używaj z pipem> 10,0!
Moje 50 centów za uzyskanie
pip freeze
podobnej listy ze skryptu Python:Jako (za długa) jedna wkładka:
Dający:
Zakres
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
.Mój przypadek użycia
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.Ostrzeżenia
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 przezsetup.py
.Kroki ku reprodukcji:
Utwórz wirtualne środowisko Sklonuj repozytorium git za pomocąsetup.py
Zachowujemy się
Zainstaluj pakiet python z repozytorium gitsetup.py
w/tmp/behave
:Jeśli uruchomimy wyżej wymienione rozwiązanie z
/tmp
Jeśli uruchomimy wyżej wymienione rozwiązanie z
/tmp/behave
behave==1.2.5a1
brakuje drugim przykładzie, ponieważ katalog roboczy zawierabehave
„ssetup.py
pliku.W dokumentacji nie znalazłem żadnego odniesienia do tego problemu. Być może otworzę dla tego błąd.
źródło
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'
.w powłoce Pythona / znaku zachęty.
źródło
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:
Który zwrócił:
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.
źródło
Od wersji PIP 1.3 masz dostęp do:
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.
źródło
pip list --local
możliwość rozróżnienia międzyvirtualenv
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()
.źródło
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 krotkipkgutil.iter_modules()
.Po prostu używam tego, aby zobaczyć aktualnie używane moduły:
który pokazuje wszystkie moduły działające na twoim pythonie.
Do wszystkich wbudowanych modułów użyj:
Który jest dyktorem zawierającym wszystkie moduły i importowane obiekty.
źródło
pydoc
nie zostałypip
zainstalowane (w moim przypadku NAS).help('modules')
po prostu wisi dla mnie bez odpowiedzi. Ale to podejściesys
działa doskonaleW normalnej powłoce po prostu użyj
źródło
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 funkcjasetuptools
do robienia tego samego. Oto alternatywna wersja, która działa z pipem 10:Daj mi znać, czy będzie działać, czy też nie, w poprzednich wersjach pipa.
źródło
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 tymsetuptools
i sprawić, że zadziałała.get_installed_distributions routine
.setuptools
.Jeśli musimy wyświetlić listę zainstalowanych pakietów w powłoce Pythona, możemy użyć
help
polecenia w następujący sposóbźródło
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.źródło
Bardzo proste wyszukiwanie przy użyciu pkgutil.iter_modules
źródło
for m in iter_modules()
i to też działało.w systemie Windows wpisz to w cmd
źródł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 .:
Następnie można skierować Safari,
http://localhost:12345/
aby wyświetlić wszystkie moduły.źródło
Spróbuj tych
lub
źródło
To pomoże
W terminalu lub IPython wpisz:
następnie
źródło
To rozwiązanie jest oparte na modułach
importlib
ipkgutil
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
Stosowanie
Dla CPython3.5 (obcięty)
Dla CPython3.4 (obcięty)
źródło
pip
- systemie zarządzania pakietami używanym do instalowania i zarządzania pakietami oprogramowania napisanymi w Pythonie, a wynikpip.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):
który następnie drukuje tabelę w postaci
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ć.źródło
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.źródło
Jeśli masz zainstalowaną dystrybucję python anakonda , możesz również użyć
oprócz rozwiązań opisanych powyżej.
źródło
conda install
, powinien działać :)sys.modules
pip
), możesz spojrzeć napip.get_installed_distributions()
W drugim celu przykładowy kod:
źródło
/usr/bin/python
czy ten pochodzi z python.org ? W przypadku tego pierwszego mogę używaćsys.modules
bez problemu.system.modules
zamiastsys.modules
.Dla najnowszej wersji, takiej jak Pip 20
Uruchom następujące polecenie w edytorze Python lub IPython
Przeczytaj inne odpowiedzi i zbierz razem to połączenie, które jest najszybsze i najłatwiejsze w Pythonie
źródło
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.
źródło
Istnieje wiele sposobów na skórowanie kota.
Najprostszym sposobem jest użycie
pydoc
funkcji bezpośrednio z powłoki za pomocą:pydoc modules
Aby uzyskać więcej informacji, skorzystaj z narzędzia o nazwie pip-date, które również poda daty instalacji.
pip install pip-date
źródło
Istnieje wiele pomysłów, początkowo zastanawiam się nad tymi dwoma:
pypeć
pomoc („moduły”)
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:
źródło
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.
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.
To, co odkryłem, różniło się również od tego, co oficjalnie publikują . W momencie pisania tego:
źródło
Instalacja
Kod
Przykładowe dane wyjściowe:
źródło
Oto rozwiązanie kodu python, które zwróci listę zainstalowanych modułów. Można łatwo zmodyfikować kod, aby zawierał numery wersji.
źródło
Dla każdego, kto zastanawia się, jak zadzwonić
pip list
z programu w języku Python, można użyć następujących opcji:źródło
Z muszli
Jeśli to nie pomoże, możesz to zrobić.
I zobacz, co to produkuje.
źródło