Учитывая имя пакета PyPI, например PyYAML, как можно программно определить модули, доступные в пакете ( дистрибутив), которые можно импортировать?
Деталь
Меня конкретно не интересует PyYAML, это просто хороший пример популярного пакета PyPI, который имеет другое имя пакета (PyYAML) из имени основного модуля (yaml), так что вы не сможете легко угадать имя модуля по имени пакета.
Я видел другие ответы на вопросы, которые звучат так, но отличаются, вероятно, из-за конфликта имен.
- пакет означает конструкцию Python, позволяющую использовать набор модулей.
- пакет означает "Пакет распространения", архивный файл, содержащий пакеты Python. , модули и другие файлы ресурсов, которые используются для распространения Релиза.
Мой вопрос касается отношений между пакетами дистрибутива и модулями внутри.
Возможные пространства решений
Области, которые кажутся плодотворными (но в которых я еще не добился успеха):
- The
pydoc.helpfunction (surfaced as thehelpbuilt-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 thepydoccode 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