问题描述
我正在尝试使用 marshal
或 dill
转储一段已编译的 Python 代码。
源代码是用compiled(src,"<source>","exec",optimize=2)
编译的,编译后的代码运行良好。
然而,当编译后的代码使用 dill
或 marshal
转储并再次加载时,
代码引发 NameError
,如下例所示。
代码示例:
- 文件
source.py
import sympy pp = sympy.pprint x = sympy.Symbol("x") def p(*args): try: pp(*args) except TypeError: print(*args) p(5*x+1)
- 文件
compiler.py
import dill #import marshal with open("source.py") as fp: src = fp.read() compiled = compile(src,optimize=2) exec(compiled) # ok obj = dill.dumps(compiled) loaded = dill.loads(obj) exec(loaded) # NameError: name "pp" is not defined
我该如何解决这个问题?如果这是预期的行为,是否有任何替代方法可以序列化/反序列化编译后的代码? (我还不担心安全问题。)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)