Список установленных пакетов сайта python?

from distutils.sysconfig import get_python_lib; print get_python_lib()

Возвращает: /usr/lib/python2.6/site-packages

import sys; print sys.path

Возвращает: ['', '/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',...............

Но как перечислить "импортируемое имя" из установленных пакетов сайта? Например: (перед результатами импорта) django, pip, trm2pdf....

Спасибо.

Ответ 1

Отъезд yolk.

Yolk - это инструмент командной строки Python и библиотека для получения информации о пакетах, установленных установками setuptools, easy_install и distutils (Python 2.5) и для запроса PyPI (Индекс пакетов Python a.k.a.).

Ответ 2

pip является тем, который предназначен для задания, поскольку он является инструментом для установки и управления пакетами Python. После установки вы должны выполнить:

pip freeze

Это будет выводить информацию о пакетах и ​​версиях в формате требований пипсов (их можно использовать позже для установки этих пакетов с помощью одной команды). Формат вывода выглядит так:

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

Ответ 3

Вы хотите sys.modules.

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

Вы можете нарезать кубиками и кубиками.

Ответ 4

Вы можете использовать pkgutil. Здесь перечислены все модули внутри /usr/lib/python 2.6/site-packages: (В отличие от sys.modules, это перечисляет модули без необходимости их импорта в первую очередь).

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

Edit: Документы не отображают walk_packages. Однако pkgutil включает walk_packages в pkgutil.__all__. Это означает, что он является частью публичного интерфейса pkgutil. Вы можете найти следующую документацию на walk_packages в /usr/lib/python 2.6/pkgutil.py или набрав 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__+'.')

Ответ 5

Я не знаю простого пути. Распространение Python (то есть что-то, что было установлено, например Django 1.3) может иметь ноль или более модулей Python, ноль или более пакетов Python (т.е. модули, которые имеют подмодули, а не другие инструменты, вызывающие пакеты), ноль или более скриптов, ноль или более Дата файлы. Если вы установили с помощью pip или easy_install, файлы метаданных записываются в каталоги каталогов/файлов/zipped-каталогов, поэтому инструмент может перемещать эти файлы, чтобы отображать, какие модули или пакеты были установлены для распространения, но я не знаю ни одного инструмента, который делает это.

yolk и pip freeze будут только перечислять дистрибутивы (даже если они называют их пакетами), чтобы вы знали, какая версия установлена, а затем вы можете обновить или удалить их.

Проверка sys.modules дает только информацию о модулях, импортированных во время текущей сессии Python.

Итак, чтобы узнать, какие модули импортируются в вашей системе после установки дистрибутивов, вам необходимо прибегнуть к грубой проверке пакетов сайтов и аналогичных каталогов или написать код для обработки файлов метаданных пакетов и извлечения модулей. Это не будет работать для дистрибутивов, установленных с чистыми distutils.

Это явно несовершенно и запутанно; все еще работали над упаковкой Python.

Кстати, могу ли я спросить, что является прецедентом для вашего вопроса? Как правило, вы устанавливаете один дистрибутив, чтобы что-то с ним делать, и те же документы, которые сообщают вам, что устанавливать, скажут вам, что импортировать.