Учитывая имя пакета PyPI, например PyYAML
, как можно программно определить модули, доступные в пакете ( дистрибутив), которые можно импортировать?
Деталь
Меня конкретно не интересует PyYAML
, это просто хороший пример популярного пакета PyPI, который имеет другое имя пакета (PyYAML
) из имени основного модуля (yaml
), так что вы не сможете легко угадать имя модуля по имени пакета.
Я видел другие ответы на вопросы, которые звучат так, но отличаются, вероятно, из-за конфликта имен.
- пакет означает конструкцию Python, позволяющую использовать набор модулей.
- пакет означает "Пакет распространения", архивный файл, содержащий пакеты Python. , модули и другие файлы ресурсов, которые используются для распространения Релиза.
Мой вопрос касается отношений между пакетами дистрибутива и модулями внутри.
Возможные пространства решений
Области, которые кажутся плодотворными (но в которых я еще не добился успеха):
- The
pydoc.help
function (surfaced as thehelp
built-in) outputs a complete list of all available modules when called ashelp('modules')
. This shows modules that have not been imported but could be. It outputs in a human readable form to stdout, and I've been unable to figure out how thepydoc
code enumerates the modules.- I could imagine calling this, gathering the module list, installing a new distribution package into a virtualenv with pip programatically, calling it again and diffing the results.
- Progamatically installing a distribution package with pip in order to
- Iterate through elements of the python path to find modules