Как загрузить абстрактное синтаксическое дерево модуля python по его имени? - PullRequest
0 голосов
/ 04 июня 2018

Допустим, имя модуля доступно в виде строки, а не объекта модуля.Как найти местоположение его исходного кода и загрузить абстрактное синтаксическое дерево (если исходный код присутствует)?

1 Ответ

0 голосов
/ 04 июня 2018

Я бы решил проблему в три этапа:

  1. Импортировать модуль по имени.Это должно быть относительно просто, используя importlib.import_module, хотя вы можете создать собственную версию с помощью встроенного __import__, если вам нужно.
  2. Получите исходный код для модуля.Использование inspect.getsource, вероятно, самый простой способ (но вы также можете просто попробовать open(the_module.__file__).read(), и это, вероятно, сработает).
  3. Разобрать источник в AST.Это должно быть легко с ast.parse.Даже для этого шага библиотека не обязательна, так как вместо этого вы можете использовать встроенный compile, если вы передадите соответствующий флаг (ast.PyCF_ONLY_AST в моей системе 1024, поэтому compile(source, filename, 'exec', 1024) долженработа).
...