2012-10-17 14 views
93

Czy istnieje sposób w Pythonie do wyświetlenia wszystkich zainstalowanych pakietów i ich wersji?Jak wyświetlić listę wszystkich zainstalowanych pakietów i ich wersji w Pythonie?

Wiem, że mogę wejść do środka python/Lib/site-packages i zobaczyć, jakie pliki i katalogi istnieją, ale uważam to za bardzo niezręczne. Czego szukam, co jest podobne do npm list[1].

+0

możliwy duplikat [Jak mogę uzyskać listę zainstalowanych lokalnie modułów Pythona?] (Http://stackoverflow.com/questions/739993/how-can-i-get-a-list-of-locally-installed- python-modules) – RNA

Odpowiedz

146

Jeśli pip zainstalować i chcesz zobaczyć, jakie pakiety zostały zainstalowane ze swoimi narzędziami instalatora można po prostu nazwać to:

pip freeze 

Będzie ona również obejmować numery wersji zainstalowanych pakietów.

Aktualizacja

pip został zaktualizowany również produkować taką samą moc jak pip freeze pod numerem:

pip list 

Uwaga

Wyjście z pip list jest sformatowany inaczej, więc jeśli masz jakiś skrypt powłoki, który analizuje dane wyjściowe (może pobrać numer wersji) z freeze i chcesz zmienić skrypt, aby zadzwonić pod numer list, musisz zmienić kod parsujący.

+8

IMHO powinny podać 'pip list' jako alias dla' pip freeze'. Intuicyjne jest pisanie 'pip freeze> requirements.txt', ale nie' pip freeze'. – jsalonen

+3

WOW: Po prostu zajrzałem do dokumentacji najnowszej wersji pip i wygląda na to, że dodały 'pip list': http://www.pip-installer.org/en/latest/usage.html#pip-list - więc to jest właściwie coś, co już nadchodzi! – jsalonen

+1

Czy odpowiedź powinna zostać zaktualizowana do komentarza 'pip list' z @jsalonen? –

28

help('modules') powinien zrobić to za Ciebie.

w ipython:

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 
+1

To przydaje się! Bardzo bym chciała zobaczyć wersje. – jsalonen

+3

Myślę, że problem polega na tym, że nie ma znormalizowanego sposobu włączenia wersji ... czasami jest to 'Package.version()' lub 'pakiet .__ version__' lub' pakiet.ver' lub dowolna liczba innych możliwości –

+0

Myślałem, że motto Pythona było "jest tylko jeden sposób to zrobić";)? –

4

tak! należy używać pip jako menedżera pakietu python (http://pypi.python.org/pypi/pip)

z zainstalowanym pip pakietów, można zrobić

pip freeze 

i będzie to lista wszystkich zainstalowanych pakietów. Prawdopodobnie powinieneś także używać virtualenv i virtualenvwrapper. Po uruchomieniu nowego projektu, można zrobić

mkvirtualenv my_new_project 

a następnie (wewnątrz tego virtualenv), wykonaj

pip install all_your_stuff 

ten sposób można workon my_new_project a następnie pip freeze aby sprawdzić, które pakiety są zainstalowane że virtualenv/project.

na przykład:

➜ ~ mkvirtualenv yo_dude 
New python executable in yo_dude/bin/python 
Installing setuptools............done. 
Installing pip...............done. 
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/predeactivate 
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/postdeactivate 
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/preactivate 
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/postactivate 
virtualenvwrapper.user_scripts creating /Users/aaylward/dev/virtualenvs/yo_dude/bin/get_env_details 

(yo_dude)➜ ~ pip install django 
Downloading/unpacking django 
    Downloading Django-1.4.1.tar.gz (7.7Mb): 7.7Mb downloaded 
    Running setup.py egg_info for package django 

Installing collected packages: django 
    Running setup.py install for django 
    changing mode of build/scripts-2.7/django-admin.py from 644 to 755 

    changing mode of /Users/aaylward/dev/virtualenvs/yo_dude/bin/django-admin.py to 755 
Successfully installed django 
Cleaning up... 

(yo_dude)➜ ~ pip freeze 
Django==1.4.1 
wsgiref==0.1.2 

(yo_dude)➜ ~ 

lub jeśli masz pakiet Pythona z wymaganiami.pip plik,

mkvirtualenv my_awesome_project 
pip install -r requirements.pip 
pip freeze 

rade

+0

O tak, od pewnego czasu używam virtualenv. Po prostu nie wiem, jak się nie domyśliłem, że mogę w ten sposób użyć 'pip' razem z nim! – jsalonen

+0

@jsalonen to naprawdę dobry sposób na zarządzanie pakietami! – Andbdrew

+0

Informacje o 'virtualenv' z globalnymi pakietami lokacji wymagają użycia [' pip list --local'] (http://stackoverflow.com/a/24661035/1959808). –

2

Oto sposób to zrobić przy użyciu PYTHONPATH zamiast bezwzględnej ścieżki swoimi bibliotekami Pythona reż:

for d in `echo "${PYTHONPATH}" | tr ':' '\n'`; do ls "${d}"; done 

[ 10:43 [email protected] ~/xCode/Projects/Python for iOS/trunk/Python for iOS/Python for iOS ]$ for d in `echo "$PYTHONPATH" | tr ':' '\n'`; do ls "${d}"; done 
libpython2.7.dylib pkgconfig   python2.7 
BaseHTTPServer.py  _pyio.pyc    cgitb.pyo    doctest.pyo   htmlentitydefs.pyc  mimetools.pyc   plat-mac    runpy.py    stringold.pyc   traceback.pyo 
BaseHTTPServer.pyc  _pyio.pyo    chunk.py    dumbdbm.py    htmlentitydefs.pyo  mimetools.pyo   platform.py   runpy.pyc    stringold.pyo   tty.py 
BaseHTTPServer.pyo  _strptime.py   chunk.pyc    dumbdbm.pyc   htmllib.py    mimetypes.py   platform.pyc   runpy.pyo    stringprep.py   tty.pyc 
Bastion.py    _strptime.pyc   chunk.pyo    dumbdbm.pyo   htmllib.pyc   mimetypes.pyc   platform.pyo   sched.py    stringprep.pyc   tty.pyo 
Bastion.pyc   _strptime.pyo   cmd.py 
.... 
9

Możesz spróbować: Żółtko

Aby zainstalować żółtka, spróbuj:

easy_install yolk 

Yolk is a Python tool for obtaining information about installed Python packages and querying packages avilable on PyPI (Python Package Index).

You can see which packages are active, non-active or in development mode and show you which have newer versions available by querying PyPI.

+1

To też jest miłe - dzięki! – jsalonen

+0

Zwykle używam PIP do tego zadania, ale mam bardzo stary projekt, w którym nie jestem gotowy do dodania do dystrybucji i pamiętam, że było tam takie narzędzie. Nie pamiętam, jak to się nazywało ... To było to! – meshantz

18

Jeśli chcesz uzyskać informacje na temat zainstalowanych rozkładów Python i nie chcą korzystać z konsoli cmd lub terminal dla niego, ale raczej za pośrednictwem kodu Pythona można użyć następującego kodu (testowane z Pythona 3.4):

import pip #needed to use the pip functions 
for i in pip.get_installed_distributions(local_only=True): 
    print(i) 

pip.get_installed_distributions(local_only=True) funkcja dyżuru zwraca iterable i ze względu na dla pętli i funkcji drukowania elementów zawartych w i terable są drukowane oddzielone znakami nowej linii (\n). Wynik będzie (w zależności od zainstalowanych rozkładów) wyglądać tak:

cycler 0.9.0 
decorator 4.0.4 
ipykernel 4.1.0 
ipython 4.0.0 
ipython-genutils 0.1.0 
ipywidgets 4.0.3 
Jinja2 2.8 
jsonschema 2.5.1 
jupyter 1.0.0 
jupyter-client 4.1.1 
#... and so on... 
5

z linii poleceń

python -c help('modules') 

mogą być wykorzystane, aby wyświetlić wszystkie moduły, a dla poszczególnych modułów

python -c help('os') 

Dla systemu Linux poniżej zadziała

python -c "help('os')" 
+3

Działa to w systemie Windows. W systemie Linux wywołuje błąd: '-bash: błąd składni w pobliżu nieoczekiwanego tokenu \' ('' – AjayKumarBasuthkar

Powiązane problemy