Как восстановить исходный код Python из загруженных модулей (sys.modules)? - PullRequest
1 голос
/ 21 августа 2010

Можно ли создать человекочитаемый источник для загруженных модулей, если у вас есть доступ к sys.modules?

Люди говорят, что вы не можете, но я уверен, что это возможно в Python.

Ответы [ 2 ]

4 голосов
/ 21 августа 2010

Вы можете дизассемблировать модуль с кодировкой Python, используя модуль dis из стандартной библиотеки: он создает определенно читабельный источник, но не Python источник, а скорее байт-код источник. Собрать яйца, начиная с омлета, немного сложнее.

Раньше был декомпилятор для Python 2.3 (см. здесь ), но я не знаю, поддерживал ли его кто-либо в течение последних нескольких лет, что говорит о том, что эта задача не вызывает особого интереса в сообществе открытого исходного кода. Если вы не согласны, вы можете раскошелиться на этот проект, создав собственный проект с целью декомпиляции 2.7 (или любой другой версии Python, для которой вы хотите декомпилировать), и привлечь других энтузиастов к этой задаче - если вы можете их найти, то есть.

0 голосов
/ 21 августа 2010

Как правило, исходный код будет доступен в файловой системе в местах, которые можно легко обнаружить из sys.modules.

for name, mod in sys.modules.items():
    try:
        fname = mod.__file__
    except AttributeError:
        continue
    if fname.endswith(".pyc"):
        fname = fname[:-1]
    try:
        fcode = open(fname)
    except IOError:
        continue
    code = fcode.read()
    # .. do something with name and code
...