Поиск каталога модуля - PullRequest
       8

Поиск каталога модуля

2 голосов
/ 10 марта 2010

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

редактирование:

объединение нескольких ответов:

module_path = os.path.dirname(imp.find_module(self.__module__)[1])

получил меня, что я хотел

Ответы [ 4 ]

1 голос
/ 10 марта 2010

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

def get_dir(module_name):
    import os,imp
    (file, pathname, description) = imp.find_module(module_name)
    return os.path.dirname(pathname)

print get_dir('os')

Выход:

C:\Python26\lib

<ч /> foo.py

def foo():
    print 'foo'

bar.py

import foo
import os
print os.path.dirname(foo.__file__)
foo.foo()

выход:

C:\Documents and Settings\xxx\My Documents
foo
1 голос
/ 10 марта 2010

Путь к файлу модуля указан в module.__file__. Вы можете использовать это с os.path.dirname, чтобы получить каталог.

1 голос
/ 10 марта 2010

Используя модуль re в качестве примера:

>>> import re
>>> path = re.__file__
>>> print path
C:\python26\lib\re.pyc
>>> import os.path
>>> print os.path.dirname(os.path.abspath(path))
C:\python26\lib

Обратите внимание, что если модуль находится в вашем текущем рабочем каталоге («CWD»), вы получите только относительный путь, например, foo.py. Я использую привычку сразу получать абсолютный путь на тот случай, если CWD будет изменен до того, как будет использован путь к модулю.

1 голос
/ 10 марта 2010

Это будет работать:

yourmodule.__file__

и если вы хотите найти модуль, из которого был импортирован объект:

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