все Python 3inspectфункция
inspect.getfile()
исходный код
Имя файла, в котором определён модуль, класс или функция. Для встроенных объектов бросает TypeError.
Синтаксис
inspect.getfile(object)
Функция берёт имя из атрибутов объекта и не проверяет, что файл существует: для кода из exec() вернётся '<string>', для расширения — путь к .so или .pyd. Встроенные модули вроде sys, функции вроде len и классы вроде int дают TypeError, а не None. Если нужен именно читаемый .py, берите getsourcefile() — она вернёт None, когда исходника нет. Путь абсолютный и зависит от машины.
Примеры
import importlib, inspect, pathlib, sys
pathlib.Path('shapes.py').write_text('def area(r):\n return 3.14 * r * r\n',
encoding='utf-8')
sys.path.insert(0, '.')
importlib.invalidate_caches()
import shapes
print(inspect.getfile(shapes.area)) # → ? полный путь к shapes.py
print(pathlib.Path(inspect.getfile(shapes.area)).name) # → shapes.py
import inspect, sys
namespace = {}
exec('def dyn(): pass', namespace)
print(inspect.getfile(namespace['dyn'])) # → <string> — файла нет, ошибки тоже
try:
inspect.getfile(sys)
except TypeError as e:
print(e) # → <module 'sys' (built-in)> is a built-in module
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности