Выполнение кода python в памяти без файла на диске

Задача, прочитать свой собственный код, запустить его, как копию в памяти. После удалить начальный файл, оставшись только в оперативной памяти.

Все заглохло на начальном этапе:

c = """
s = __import__('inspect')
code = s.getsource(s.currentframe())
"""

import inspect
import sys

code = inspect.getsource(inspect.currentframe())

e = compile(c, '<strig>', 'exec')
exec(e)

Здесь, пока, скрипт читает не свой код а пытается запустить в памяти готовый. В готовом коде динамический импорт библиотеки inspect и попытка прочитать свой код. Ошибка возникает на последней строчке exec(e):

OSError                                   Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_10756/3328276555.py in <module>
     10 
     11 e = compile(c, '<strig>', 'exec')
---> 12 exec(e)
     13 
     14 

<strig> in <module>

~\anaconda3\lib\inspect.py in getsource(object)
   1022     or code object.  The source code is returned as a single string.  An
   1023     OSError is raised if the source code cannot be retrieved."""
-> 1024     lines, lnum = getsourcelines(object)
   1025     return ''.join(lines)
   1026 

~\anaconda3\lib\inspect.py in getsourcelines(object)
   1004     raised if the source code cannot be retrieved."""
   1005     object = unwrap(object)
-> 1006     lines, lnum = findsource(object)
   1007 
   1008     if istraceback(object):

~\anaconda3\lib\inspect.py in findsource(object)
    833         lines = linecache.getlines(file)
    834     if not lines:
--> 835         raise OSError('could not get source code')
    836 
    837     if ismodule(object):

OSError: could not get source code

Я так понимаю, скрипт не может получить свой код, от чего и ошибка. Подскажите, куда смотреть в этой ситуации? Может есть готовое решение запуска копии в память без файла? Или можно как-то иначе сделать динамическую, без файла копию скрипта?


Ответы (0 шт):