Pregunta ¿Cómo puedo obtener una lista de módulos Python instalados localmente?


Me gustaría obtener una lista de módulos de Python, que están en mi instalación de Python (servidor UNIX).

¿Cómo se puede obtener una lista de módulos de Python instalados en su computadora?


741
2018-04-11 12:34


origen


Respuestas:


Solución

Mis 50 centavos por conseguir un pip freezecomo la lista de un script de 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)

Como un trazador de líneas (demasiado largo):

sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])

Dando:

['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']

Alcance

Esta solución se aplica al ámbito del sistema o al ámbito de un entorno virtual, y abarca paquetes instalados por setuptools, pip y (Dios no lo quiera) easy_install.

Mi caso de uso

Agregué el resultado de esta llamada al servidor de mi matraz, así que cuando lo llamo con http://example.com/exampleServer/environment Obtengo la lista de paquetes instalados en virtualenv del servidor. Hace que la depuración sea mucho más fácil.

Advertencias

He notado un comportamiento extraño de esta técnica, cuando el intérprete de Python se invoca en el mismo directorio que setup.py archivo, no muestra el paquete instalado por setup.py.

Pasos para reproducir:

Crea un ambiente virtual
$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $ 
Clona un git repo con 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.

Nos hemos comportado setup.py en /tmp/behave:

(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Instala el paquete python del repositorio git
(test_env) $ cd /tmp/behave && python setup.py 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

Si ejecutamos la solución antes mencionada de /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'

Si ejecutamos la solución antes mencionada de /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 falta en el segundo ejemplo, porque el directorio de trabajo contiene behavees setup.py archivo.

No pude encontrar ninguna referencia a este problema en la documentación. Tal vez abro un error para eso.


484
2018-05-27 09:05



help('modules')

en un shell / prompt de Python.


800
2018-04-11 12:45



Ahora bien, estos métodos los probé, y obtuve exactamente lo que se anunciaba: todos los módulos.

Por desgracia, realmente no te importa mucho el stdlib, ya sabes lo que obtienes con una instalación de Python.

Realmente, quiero las cosas que yo instalado

Lo que realmente, sorprendentemente, funcionó bien fue:

pip freeze

Que regresó:

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

Digo "sorprendentemente" porque la herramienta de instalación del paquete es el lugar exacto en el que uno esperaría encontrar esta funcionalidad, aunque no con el nombre 'congelar', pero el empaquetado de Python es tan extraño, que estoy asombrado de que esta herramienta tenga sentido. Pip 0.8.2, Python 2.7.


221
2018-01-16 03:42



  • En ipython puedes escribir "importLengüeta".

  • En el intérprete estándar de Python, puede escribir "help('modules')".

  • En la línea de comandos, puedes usar pydoc  modules.

  • En una secuencia de comandos, llame pkgutil.iter_modules().


69
2018-02-08 13:24



Desde la versión 1.3 de pip, tienes acceso a:

pip list

Que parece ser azúcar sintáctico para "congelar pip". Enumerará todos los módulos particulares de su instalación o virtualenv, junto con sus números de versión. Lamentablemente, no muestra el número de versión actual de ningún módulo, ni lava sus platos ni hace brillar sus zapatos.


62
2017-07-25 22:56



En el armazón normal solo usa

pydoc modules

51
2017-08-23 09:45



Solo uso esto para ver los módulos actualmente usados:

import sys as s
s.modules.keys()

que muestra todos los módulos que se ejecutan en tu python.

Para todos los módulos incorporados, use:

s.modules

Que es un dict que contiene todos los módulos y objetos de importación.


48
2018-06-22 22:02