Python: определить фактический текущий модуль (не __main__) ⇐ Python

Программы на Python
Anonymous
Python: определить фактический текущий модуль (не __main__)

Сообщение Anonymous »

Я пытаюсь определить фактический текущий модуль функции (как видно, если он импортирован из другого места), даже если текущий модуль является «средой сценариев верхнего уровня» __main__.

Это может показаться странным, но суть в том, что мне нужно сериализовать функцию и десериализовать ее (включая аргументы) на другой машине, для чего мне нужно убедиться, что правильный модуль И НЕ __main__ импортируется перед десериализацией (в противном случае я получаю сообщение об ошибке AttributeError: объект 'module' не имеет атрибута my_fun).

До сих пор я пробовал проверку:

Код: Выделить всё

import inspect
print inspect.getmodule(my_fun)
что дает мне
конечно. Я также пытался найти что-нибудь полезное с помощью globals(), но безуспешно.

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

Код: Выделить всё

m_name = __main__.__file__.split("/")[-1].replace(".pyc","")
а затем найдите модуль по имени sys.modules[m_name].

Есть ли более чистый/лучший способ сделать это?

РЕДАКТИРОВАТЬ:
Узнав о «FakeModule» ipython и еще немного погуглив, я наткнулся на этот пост, который точно описывает проблему, с которой я столкнулся, включая мое текущее решение (которое явно импортирует текущий модуль import current_module и сериализует current_module.my_fun вместо my_fun). Я пытаюсь этого избежать, так как это может быть не интуитивно понятно пользователям моего пакета.

Подробнее здесь: https://stackoverflow.com/questions/107 ... e-not-main

Вернуться в «Python»