Как я могу получить путь к файлу модуля, импортированного в python. Я использую Linux (если это имеет значение).
Например: если я в своем домашнем каталоге и импортирую модуль, он должен вернуть полный путь к моему домашнему каталогу.
Как я могу получить путь к файлу модуля, импортированного в python. Я использую Linux (если это имеет значение).
Например: если я в своем домашнем каталоге и импортирую модуль, он должен вернуть полный путь к моему домашнему каталогу.
Модули и пакеты имеют атрибут __file__
, который имеет свою информацию о пути. Если модуль был импортирован относительно текущего рабочего каталога, вы, вероятно, захотите получить его абсолютный путь.
import os.path
import my_module
print os.path.abspath(my_module.__file__)
Я использовал это:
import inspect
import os
class DummyClass: pass
print os.path.dirname(os.path.abspath(inspect.getsourcefile(DummyClass))
(Edit: это функция "where am I" - она возвращает каталог, содержащий текущий модуль. Я не совсем уверен, что это вам нужно).
Это даст вам каталог, в котором находится модуль:
import foo
os.path.dirname(foo.__file__)
Чтобы найти путь загрузки уже загруженных модулей:
>>> import sys
>>> sys.modules['os']
<module 'os' from 'c:\Python26\lib\os.pyc'>
Я использую этот метод, который применяется как к встроенным, так и к встроенным модулям:
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)>
Я мог бы опаздывать здесь, некоторые из модулей будут через AttributeError
при использовании атрибута __file__
для поиска пути. В этом случае можно использовать __path__
, чтобы получить путь к модулю.
>>> import some_module
>>> somemodule.__path__
['/usr/lib64/python2.7/site-packages/somemodule']