如何解决Dill/Marshal 反序列化后的 NameError
我正在尝试使用 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 举报,一经查实,本站将立刻删除。