перечислить зависимости пакета Python без их загрузки? - PullRequest
22 голосов
/ 20 мая 2010

Скажите, что пакет Python A требует B, C и D; есть ли способ перечислить A & rarr; B C D без загрузки их?
Requires в метаданных (yolk -M A) часто являются неполными, гр.
Можно скачать A.tar / A.egg, а затем просмотреть A / setup.py, но некоторые из них довольно кровавые.

(я бы подумал, что получение хотя бы зависимостей первого уровня можно механизировать; даже решение на 98% было бы лучше, чем лавинные загрузки.)

Смежный вопрос: пип-обновления-пакет-без модернизации-зависимостей

Ответы [ 3 ]

28 голосов
/ 20 мая 2010

Snakefood

sfood -fuq package.py | sfood-target-files 

перечислит зависимости.

`-f` tells sfood to follow dependencies recursively
`-u` tells sfood to ignore unused imports
`-q` tells sfood to be quiet about debugging information

Чтобы отфильтровать модули из стандартной библиотеки, вы можете использовать

sfood -fuq package.py | sfood-filter-stdlib | sfood-target-files 

Как вы уже заметили, если есть другие каталоги, которые вы хотели бы игнорировать, вы также можете использовать флаг sfood -I.

13 голосов
/ 20 мая 2010

modulefinder из стандартной библиотеки

Новое в версии 2.3.

Этот модуль предоставляет ModuleFinder класс, который можно использовать для определения набор модулей, импортируемых скрипт. modulefinder.py также может быть запустить как скрипт, указав имя файла сценария Python в качестве аргумента, после чего отчет о ввозе модули будут напечатаны.

Я не уверен, что он соответствует вашему требованию о том, чтобы не загружать модули. Отсюда :

проверка байт-кода использования модуля поиска найти зависимости, и, следовательно, без каких-либо побочных эффектов, которые могут быть вызвано импортом модулей изучены.

Другие советы по использованию pylint или Gui2exe здесь

6 голосов
/ 06 августа 2013

Если под пакетом вы подразумеваете установленный пакет pip (а не каталог с __init__.py), то вы можете использовать пакет Python, называемый pip. Например:

def get_all_package_dependencies():
    """Return dictionary of installed packages to list of package dependencies."""
    return {
        dist.key: [r.key for r in dist.requires()]
        for dist in pip.get_installed_distributions()
    }
...