Come elencare tutti i pacchetti installati e le loro versioni in Python?


Risposte:


196

Se hai l'installazione pip e vuoi vedere quali pacchetti sono stati installati con i tuoi strumenti di installazione, puoi semplicemente chiamare questo:

pip freeze

Includerà anche i numeri di versione per i pacchetti installati.

Aggiornare

pip è stato aggiornato per produrre anche lo stesso output pip freezechiamando:

pip list

Nota

L'output da pip listè formattato in modo diverso, quindi se hai qualche script shell che analizza l'output (forse per prendere il numero di versione) di freezee vuoi cambiare il tuo script per chiamare list, dovrai cambiare il tuo codice di analisi.


9
IMHO dovrebbero fornire pip listcome alias per pip freeze. È intuitivo da 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 pip list: pip-installer.org/en/latest/usage.html#pip-list - quindi questo è in realtà qualcosa che sta già arrivando!
jsalonen,

51

help('modules') dovrebbe farlo per te.

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

5
È utile! Mi piacerebbe vedere anche le versioni.
jsalonen,

4
Credo che il problema è non c'è nessun modo di standardizzati tra cui la versione ... a volte il suo Package.version()o package.__version__o package.vero un qualsiasi numero di altre possibilità
Joran Beasley

Pensavo che il motto di Python fosse "c'è solo un modo per farlo";)?
Ed Randall,

3
@EdRandall, no - è "un modo ovvio per farlo". C'è sempre un modo invisibile. Inoltre, la formulazione esatta è: dovrebbe esserci uno - e preferibilmente solo un - modo evidente per farlo. Anche se in quel modo potrebbe non essere ovvio all'inizio a meno che tu non sia olandese.
Rosuav,

30

Se vuoi ottenere informazioni sulle tue distribuzioni di Python installate e non vuoi usare la tua console o terminale cmd, ma piuttosto attraverso il codice Python, puoi usare 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)chiamata di funzione restituisce un iterabile e, a causa del ciclo for e della funzione di stampa, gli elementi contenuti nell'iterabile vengono stampati separati da nuovi caratteri di linea ( \n). Il risultato (a seconda delle distribuzioni installate) sarà simile al seguente:

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...

4
Per espandere il commento di @exhuma, con pip 10 dovresti usare: import pkg_resources [print (d.project_name) for d in pkg_resources.working_set]
Almenon,

Qual è lo stato di pkg_resources? AFAICR di cui fa parte setuptools. Non pip. Possiamo tranquillamente supporre che setuptoolssarà sempre disponibile solo in base a pip?
exhuma,

9

Puoi provare: tuorlo

Per installare il tuorlo, prova:

easy_install yolk

Yolk è uno strumento Python per ottenere informazioni sui pacchetti Python installati e interrogare i pacchetti disponibili su PyPI (Python Package Index).

Puoi vedere quali pacchetti sono attivi, non attivi o in modalità di sviluppo e mostrarti quali versioni più recenti sono disponibili interrogando PyPI.


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

1
Non supporta python 3 (appena installato dal pip e ha ottenuto errori di runtime)
Ohad Cohen

9

Per eseguirlo nelle versioni successive di pip (testato su pip==10.0.1) utilizzare quanto segue:

from pip._internal.operations.freeze import freeze
for requirement in freeze(local_only=True):
    print(requirement)

Qual è lo stato di internal ?. Vedo pydoc pip._internalma non riesco a raggiungerlo sotto help(pip._internal), pip .__ builtins_ ecc. La guida di riferimento pip è anche vuota.
MortenB,

1
Sfortunatamente non lo so. Non mi piace nemmeno che venga chiamato _internal. Sembra che la funzionalità non sia ufficialmente esposta. Quindi dovresti gestirlo con cura!
exhuma,

8

dalla riga di comando

python -c help('modules')

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

python -c help('os')

Per Linux di seguito funzionerà

python -c "help('os')"

5
Funziona su Windows. Su Linux genera l'errore:-bash: syntax error near unexpected token `('
AjayKumarBasuthkar

questo non fornisce le versioni dei moduli
Stepan Yakovenko,

5

sì! dovresti usare pip come gestore dei pacchetti python ( http://pypi.python.org/pypi/pip )

con i pacchetti pip installati, puoi fare un

pip freeze

e elencherà tutti i pacchetti installati. Probabilmente dovresti anche usare virtualenv e virtualenvwrapper . Quando inizi un nuovo progetto, puoi farlo

mkvirtualenv my_new_project

e poi (dentro quella virtualenv), fallo

pip install all_your_stuff

In questo modo, è possibile workon my_new_projecte quindi pip freezevedere quali pacchetti sono installati per quel progetto / virtualenv.

per 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 hai un pacchetto python con un file requisito.pip,

mkvirtualenv my_awesome_project
pip install -r requirements.pip
pip freeze

farà il trucco


Oh sì, sto usando virtualenv in realtà da qualche tempo. Semplicemente non so come non ho capito che posso usarlo pipin questo modo!
jsalonen,

A proposito virtualenvdi pacchetti di siti globali, è quindi necessario utilizzare pip list --local.
Ioannis Filippidis,

@johntex non dovresti mai usare i pacchetti di siti globali!
Andbdrew,

L'uso di pacchetti di siti globali è molto utile. In caso contrario, l'opzione non esisterebbe affatto virtualenv. Non sono a conoscenza di alcun motivo per non usarli e nessuno ti impedisce di limitarti all'isolato virtualenvse preferisci.
Ioannis Filippidis,

Un ottimo motivo per non usarli è che quando distribuisci o distribuisci la tua app o programma, altre persone / server non avranno i tuoi pacchetti di siti globali. Se sei l'unica persona che utilizza l'app, fai quello che vuoi.
Andbdrew,

5

La mia opinione:

#!/usr/bin/env python3

import pkg_resources

dists = [str(d).replace(" ","==") for d in pkg_resources.working_set]
for i in dists:
    print(i)

2

Ecco un modo per farlo usando PYTHONPATHinvece il percorso assoluto della tua directory libs python:

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

[ 10:43 Jonathan@MacBookPro-2 ~/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
....


1

Se questo è necessario per essere eseguito da Python, puoi semplicemente invocare il sottoprocesso

from subprocess import PIPE, Popen

pip_process = Popen(["pip freeze"], stdout=PIPE,
                   stderr=PIPE, shell=True)
stdout, stderr = pip_process.communicate()
print(stdout.decode("utf-8"))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.