2010-02-20 25 views
10
from distutils.sysconfig import get_python_lib; print get_python_lib() 

Devuelve: /usr/lib/python2.6/site-packages¿Listado de paquetes de sitio de python instalados?

import sys; print sys.path 

Devuelve: ['', '/usr/lib/python2.6/site-packages/Django-1.1.1-py2.6.egg', '/usr/lib/python2.6/site-packages/pip-0.6.3-py2.6.egg', '/usr/lib/python2.6/site-packages/TRML2PDF-1.0-py2.6.egg', '/usr/lib/python2.6/site-packages/django_threaded_multihost-1.3_3-py2.6.egg',...............

Pero cómo enumerar el "nombre importable" de los site-packages instalados? E.g: (antes de los resultados de importación) django, pip, trm2pdf....

Gracias.

+0

Ignora mi voto cercano: hay una diferencia sustancial (lee demasiado rápido) – ChristopheD

+0

¿Has probado [Stallion] (http://pyevolve.sourceforge.net/wordpress/?p=2200)? – Tarantula

Respuesta

7

Consulte yolk.

Yolk is a Python command-line tool and library for obtaining information about packages installed by setuptools, easy_install and distutils (Python 2.5) and for querying PyPI (Python Package Index a.k.a. The Cheese Shop).

+0

¡Niza !, si ejecuto yolk -l ... Me enumera: Django ... etc., etc. pero el "nombre importable" correcto es django (minúscula). ¿Qué hay de eso? – panchicore

2

Puede usar pkgutil. Esto enumera todos los módulos dentro de /usr/lib/python2.6/site-packages: (A diferencia de sys.modules, esto enumera los módulos sin que usted tenga que importarlos primero).

import pkgutil 
print [name for module_loader,name,ispkg in 
      pkgutil.walk_packages(['/usr/lib/python2.6/site-packages'])] 

Editar: The docs no enumera walk_packages. Sin embargo, pkgutil incluye walk_packages en pkgutil.__all__. Esto significa que es parte de la interfaz pública de pkgutil. Puede encontrar la siguiente documentación en walk_packages en /usr/lib/python2.6/pkgutil.py o escribiendo help(pkgutil.walk_packages):

Definition: pkgutil.walk_packages(path=None, prefix='', onerror=None) 
Docstring: 
    Yields (module_loader, name, ispkg) for all modules recursively 
    on path, or, if path is None, all accessible modules. 

    'path' should be either None or a list of paths to look for 
    modules in. 

    'prefix' is a string to output on the front of every module name 
    on output. 

    Note that this function must import all *packages* (NOT all 
    modules!) on the given path, in order to access the __path__ 
    attribute to find submodules. 

    'onerror' is a function which gets called with one argument (the 
    name of the package which was being imported) if any exception 
    occurs while trying to import a package. If no onerror function is 
    supplied, ImportErrors are caught and ignored, while all other 
    exceptions are propagated, terminating the search. 

    Examples: 

    # list all modules python can access 
    walk_packages() 

    # list all submodules of ctypes 
    walk_packages(ctypes.__path__, ctypes.__name__+'.') 
3

¿Quieres sys.modules.

import pprint, sys 
pprint.pprint(sys.modules) 

Puede cortar y cortar desde allí.

+0

>>> pprint importación, sys >>> pprint (sys.modules) Rastreo (llamada más reciente pasado): Archivo "", línea 1, en TypeError: 'módulo' objeto no es exigible – panchicore

+3

Try 'pprint.pprint (sys.modules)' –

+0

el resultado es: {'UserDict': ,.... no parecen ser los plugins instalados. – panchicore

10

pip es el único para el trabajo, ya que es una herramienta para instalar y administrar paquetes de Python. Después de la instalación tiene que ejecutar:

pip freeze 

Esa es la salida de los paquetes y la información de versión en formato pips requisitos (se puede utilizar más adelante para instalar los paquetes con un comando). El formato de la salida es como:

querystring-parser==1.0 
raven==1.4.6 
requests==0.14.2 
scipy==0.10.1 
+1

A partir de la pip 1.3 hay un comando [list] (http://www.pip-installer.org/en/latest/usage.html#pip-list). –

0

No sé de una manera fácil. Una distribución Python (es decir, algo que se instaló, como Django 1.3) puede tener cero o más módulos Python, cero o más paquetes Python (es decir, módulos que tienen submódulos, no lo que otras herramientas llaman paquetes), cero o más scripts, cero o más archivos de información. Si instaló con pip o easy_install, los archivos de metadatos se escriben en los directorios/directorios/directorios zip de info egg, por lo que una herramienta podría recorrer estos archivos para mostrar qué módulos o paquetes se instalaron para una distribución, pero no conozco ningún herramienta que hace eso.

yolk y pip freeze solo mostrarán las distribuciones (incluso si los llaman paquetes), para saber qué versión están instaladas, y luego pueden actualizarlas o desinstalarlas.

La inspección de sys.modules solo proporciona información sobre los módulos importados durante la sesión actual de Python.

Para saber qué módulos son importables en su sistema después de instalar distribuciones, debe recurrir a la inspección cruda de paquetes de sitios y directorios similares, o escribir algún código para recorrer los archivos de metadatos de empaquetado y extraer módulos.Esto no funcionará para las distribuciones instaladas con distutils puros.

Esto es claramente imperfecto y confuso; todavía estamos trabajando en el empaque de Python.

Por cierto, ¿puedo preguntar cuál es el uso de su pregunta? Normalmente instala una distribución para hacer algo con ella, y la misma documentación que le dice qué instalar le dirá qué importar.

Cuestiones relacionadas