2012-10-17 20 views
93

C'è un modo in Python per elencare tutti i pacchetti installati e le loro versioni?Come elencare tutti i pacchetti installati e le loro versioni in Python?

So che posso andare all'interno di python/Lib/site-packages e vedere quali file e directory esistono, ma trovo questo molto imbarazzante. Quello che sto cercando qualcosa che è simile a npm list[1].

+0

possibile duplicato di [Come posso ottenere un elenco di moduli Python installati localmente?] (Http://stackoverflow.com/questions/739993/how-can-i-get-a-list-of-locally-installed- python-modules) – RNA

risposta

146

Se avete pip installare e si vuole vedere quali pacchetti sono stati installati con i vostri strumenti di installazione si può semplicemente chiamare questo:

pip freeze 

Esso comprende anche numeri di versione per i pacchetti installati.

Aggiornamento

pip è stato aggiornato per produrre anche lo stesso risultato pip freeze chiamando:

pip list 

Nota

L'uscita dal pip list è formattato in modo diverso, quindi se hai uno script di shell che analizza l'output (forse per prendere il numero di versione) di freeze e vuoi cambiare lo script per chiamare list, dovrai modificare il codice di analisi.

+8

IMHO dovrebbero fornire 'pip list' come alias per' pip freeze'. È intuitivo scrivere 'pip freeze> requirements.txt', ma non' pip freeze'. – jsalonen

+3

WOW: ho appena esaminato la documentazione dell'ultima versione di pip e sembra che abbiano aggiunto la 'pip list': http://www.pip-installer.org/en/latest/usage.html#pip-list - quindi questo è in realtà qualcosa che sta arrivando già! – jsalonen

+1

La risposta deve essere aggiornata al commento 'pip list' di @jsalonen? –

28

help('modules') dovrebbe farlo per voi.

in 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

Questo è utile! Mi piacerebbe vedere anche le versioni. – jsalonen

+3

Penso che il problema non sia un modo standardizzato di includere la versione ... a volte il suo 'Package.version()' o 'pacchetto .__ version__' o' package.ver' o un numero qualsiasi di altre possibilità –

+0

ho pensato al motto del pitone era "c'è un solo modo per farlo";)? –

4

sì! si dovrebbe utilizzare pip come il gestore di pacchetti python (http://pypi.python.org/pypi/pip)

con i pacchetti pip installato, si può fare un

pip freeze 

ed elencherà tutti i pacchetti installati. Probabilmente dovresti usare anche virtualenv e virtualenvwrapper. Quando si inizia un nuovo progetto, si può fare

mkvirtualenv my_new_project 

e poi (all'interno di quella virtualenv), fare

pip install all_your_stuff 

In questo modo, è possibile workon my_new_project e poi pip freeze per visualizzare i pacchetti installati per quella virtualenv/progetto.

ad esempio:

➜ ~ 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)➜ ~ 

o se si dispone di un pacchetto python con una requisiti.file di pip,

mkvirtualenv my_awesome_project 
pip install -r requirements.pip 
pip freeze 

farà il trucco

+0

Oh sì, sto usando virtualenv in realtà da un po 'di tempo. Solo non so come non ho capito che posso usare 'pip' insieme a questo in questo modo! – jsalonen

+0

@jsalonen è davvero un bel modo per gestire i pacchetti! – Andbdrew

+0

Informazioni su 'virtualenv' con pacchetti di siti globali, è quindi necessario utilizzare [' lista pip --local'] (http://stackoverflow.com/a/24661035/1959808). –

2

Ecco un modo per farlo utilizzando PYTHONPATH anziché il percorso assoluto delle vostre librerie Python dir:

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

Puoi provare: Tuorlo

Per installare il tuorlo, provare:

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

Anche questo è bello - grazie! – jsalonen

+0

A questo punto di solito uso pip per questa attività, ma ho un progetto molto vecchio che non sono pronto ad aggiungere, e mi sono ricordato che c'era uno strumento come questo là fuori. Non riuscivo a ricordare come si chiamava però ... Era così! – meshantz

18

Se si desidera ottenere informazioni sulle vostre distribuzioni pitone installati e non si desidera utilizzare la console cmd o un terminale per esso, ma piuttosto attraverso il codice python , è possibile utilizzare il seguente codice (testato con python 3.4):

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

la pip.get_installed_distributions(local_only=True) funzione di chiamata restituisce un iterabile e per la for-loop e la funzione di stampa gli elementi contenuti nel i terable vengono stampati separati da caratteri di nuova riga (\n). Il risultato sarà (a seconda delle distribuzioni installate) cerca qualcosa di simile:

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

da linea di comando

python -c help('modules') 

può essere utilizzato per visualizzare tutti i moduli, e per i moduli specifici

python -c help('os') 

Per Linux di seguito funzionerà

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

Funziona su Windows. Su linux genera errore: '-bash: errore di sintassi vicino a un token imprevisto \' ('' – AjayKumarBasuthkar

Problemi correlati