Python, как использовать Imp.find_module или альтернативный - PullRequest
2 голосов
/ 27 марта 2012

Я сейчас пишу автозаполнение для python.Поэтому мне нужно найти импортируемые модули.

Это кажется довольно простым с imp.find_module, но он не работает, если я вставляю путь, что важно для автозаполнения.Вставка пути означает, что он не найдет системные модули.

Решение было бы получить PYTHONPATH, а затем вставить его.Но это действительно не очень хороший способ сделать это, так как я просто хочу путь по умолчанию.Кроме того, PYTHONPATH отсутствует даже в моем os.environ [].

Нет ли альтернативы этой сложной процедуре?А если нет, как я могу получить пути к библиотекам по умолчанию?

Может быть, есть даже лучшее решение, которое автоматически сканирует каталоги?

Примечание. Поскольку япри написании автозаполнения я не хочу фактически импортировать / выполнять любой код.

1 Ответ

1 голос
/ 27 марта 2012

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

>>> import sys
>>> sys.path
['', '/usr/lib/python27.zip', '/usr/lib/python2.7', ...]

Используя эти пути, вы можете искать их, используя os.listdir, например:

import sys, os 
standardlib = os.listdir(sys.path[n])

Вам нужно будет проверить, является ли путь каталогом.

stdlibs = []
for lib in sys.path:
    if os.path.isdir(lib): 
        for module in os.listdir(lib):
            stdlibs.append(lib + "/" + module)

Возможно, вам придется проверить это рекурсивно и проверить наличие расширений.

Это поможет вам понять, с чего начать.

Вам также необходимо проверить текущий каталог (os.getcwd()) на наличие файлов, которые могут быть частью пакета ( структура пакета python ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...