2012-01-25 2 views

ответ

2

Вы можете использовать inspect модуль из стандартной библиотеки Python

import inspect 


inspect.getfile(some_func) 
+0

Очень приятно! Не знал об этом. Кажется, что он перестает работать с большим количеством функций (например, 'struct.pack'), чем просто консультироваться с' sys.modules'. –

+0

@MattiVirkkunen, 'sys.modules [struct.pack .__ module __] .__ file__' raise' Объект AttributeError: 'module' не имеет атрибута '__file __' 'для меня. Похоже, что нет способа обработать встроенные функции 'sys.modules [struct.pack .__ module __]' -> '' – reclosedev

+0

Я предполагаю, что это должно быть разница версии или платформы. К счастью, вам не нужно действительно знать, какой файл имеет встроенный. –

2

Это должно работать для большинства функций. Он не будет работать для встроенных модулей, но вы не импортируете их в любом случае.

import sys 
sys.modules[somefunc.__module__].__file__ 
+0

Не уверен, если это работает с функциями-членами, например, ' '' .strip .__ module__' является' None'. – NPE

+0

@aix: Это потому, что это встроенный. –

Смежные вопросы