Ответ 1
Отъезд yolk.
Yolk - это инструмент командной строки Python и библиотека для получения информации о пакетах, установленных установками setuptools, easy_install и distutils (Python 2.5) и для запроса PyPI (Индекс пакетов Python a.k.a.).
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....
Спасибо.
Отъезд yolk.
Yolk - это инструмент командной строки Python и библиотека для получения информации о пакетах, установленных установками setuptools, easy_install и distutils (Python 2.5) и для запроса PyPI (Индекс пакетов Python a.k.a.).
pip является тем, который предназначен для задания, поскольку он является инструментом для установки и управления пакетами Python. После установки вы должны выполнить:
pip freeze
Это будет выводить информацию о пакетах и версиях в формате требований пипсов (их можно использовать позже для установки этих пакетов с помощью одной команды). Формат вывода выглядит так:
querystring-parser==1.0
raven==1.4.6
requests==0.14.2
scipy==0.10.1
Вы хотите sys.modules
.
import pprint, sys
pprint.pprint(sys.modules)
Вы можете нарезать кубиками и кубиками.
Вы можете использовать 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__+'.')
Я не знаю простого пути. Распространение Python (то есть что-то, что было установлено, например Django 1.3) может иметь ноль или более модулей Python, ноль или более пакетов Python (т.е. модули, которые имеют подмодули, а не другие инструменты, вызывающие пакеты), ноль или более скриптов, ноль или более Дата файлы. Если вы установили с помощью pip или easy_install, файлы метаданных записываются в каталоги каталогов/файлов/zipped-каталогов, поэтому инструмент может перемещать эти файлы, чтобы отображать, какие модули или пакеты были установлены для распространения, но я не знаю ни одного инструмента, который делает это.
yolk и pip freeze будут только перечислять дистрибутивы (даже если они называют их пакетами), чтобы вы знали, какая версия установлена, а затем вы можете обновить или удалить их.
Проверка sys.modules дает только информацию о модулях, импортированных во время текущей сессии Python.
Итак, чтобы узнать, какие модули импортируются в вашей системе после установки дистрибутивов, вам необходимо прибегнуть к грубой проверке пакетов сайтов и аналогичных каталогов или написать код для обработки файлов метаданных пакетов и извлечения модулей. Это не будет работать для дистрибутивов, установленных с чистыми distutils.
Это явно несовершенно и запутанно; все еще работали над упаковкой Python.
Кстати, могу ли я спросить, что является прецедентом для вашего вопроса? Как правило, вы устанавливаете один дистрибутив, чтобы что-то с ним делать, и те же документы, которые сообщают вам, что устанавливать, скажут вам, что импортировать.