Подтвердить что ты не робот

Получение пути к импортируемому модулю

Как я могу получить путь к файлу модуля, импортированного в python. Я использую Linux (если это имеет значение).

Например: если я в своем домашнем каталоге и импортирую модуль, он должен вернуть полный путь к моему домашнему каталогу.

4b9b3361

Ответ 1

Модули и пакеты имеют атрибут __file__, который имеет свою информацию о пути. Если модуль был импортирован относительно текущего рабочего каталога, вы, вероятно, захотите получить его абсолютный путь.

import os.path
import my_module

print os.path.abspath(my_module.__file__)

Ответ 2

Я использовал это:

import inspect
import os
class DummyClass: pass
print os.path.dirname(os.path.abspath(inspect.getsourcefile(DummyClass))

(Edit: это функция "where am I" - она ​​возвращает каталог, содержащий текущий модуль. Я не совсем уверен, что это вам нужно).

Ответ 3

Это даст вам каталог, в котором находится модуль:

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

Ответ 4

Чтобы найти путь загрузки уже загруженных модулей:

>>> import sys
>>> sys.modules['os']
<module 'os' from 'c:\Python26\lib\os.pyc'>

Ответ 5

Я использую этот метод, который применяется как к встроенным, так и к встроенным модулям:

def showModulePath(module):
        if (hasattr(module, '__name__') is False):
            print 'Error: ' + str(module) + ' is not a module object.'
            return None
        moduleName = module.__name__
        modulePath = None
        if imp.is_builtin(moduleName):
            modulePath = sys.modules[moduleName];
        else:
            modulePath = inspect.getsourcefile(module)
            modulePath = '<module \'' + moduleName + '\' from \'' + modulePath + 'c\'>'
        print modulePath 
        return modulePath

Пример:

Utils.showModulePath(os)
Utils.showModulePath(cPickle)

Результат:

<module 'os' from 'C:\SciSoft\WinPython-64bit-2.7.10.3\python-2.7.10.amd64\lib\os.pyc'>
<module 'cPickle' (built-in)>

Ответ 6

Я мог бы опаздывать здесь, некоторые из модулей будут через AttributeError при использовании атрибута __file__ для поиска пути. В этом случае можно использовать __path__, чтобы получить путь к модулю.

>>> import some_module
>>> somemodule.__path__
['/usr/lib64/python2.7/site-packages/somemodule']