我正在研究MacroPy,项目所做的一件事就是通过PEP302导入钩子挂钩到Python导入系统。但是,我没有做过(也想做)的一件事就是让MacroPy将导入的代码保存到.pyc
文件中,就像普通导入一样,并优先使用.pyc
文件。 {1}}文件,如果时间戳匹配。
目前,我的代码如下:
.py
这基本上是从py_compile模块复制并粘贴的,并且已修改为使用内存文件而不是磁盘。
我不喜欢这个副本和粘贴,因为它很脆弱:它不适用于def export_transformed(self, code, tree, module_name, file_name):
f = open(file_name + suffix , 'wb')
f.write('\0\0\0\0')
timestamp = long(os.fstat(f.fileno()).st_mtime)
wr_long(f, timestamp)
marshal.dump(code, f)
f.flush()
f.seek(0, 0)
f.write(imp.get_magic())
def find(self, file, pathname, description, module_name, package_path):
try:
f = open(file.name + suffix, 'rb')
x = imp.load_compiled(module_name, pathname + suffix, f)
return x
except Exception, e:
print e
,并且不适用于python3的sys.dont_write_bytecode
。我可以手动修复这些以模拟行为,但我真正想要的是一种手动调用函数的方法:
pycache
并将其挂钩到正常的try_load_pyc(name, timestamp)
save_pyc(name, code)
保存/加载工作流程(已经尊重所有与pyc相关的切换,env变量等),而不是自己重新实现所有行为,而不是单调乏味我自己重新实施所有行为。
我用谷歌搜索过,并没有想出太多东西。这些功能是在Python 2.7和Python 3.4中公开的,还是有第三方模块可以为我做这个?