主要是我是c ++开发人员,试图为我使用python执行某些任务。 我在python 3.6中制作了一个python模块,并使用以下命令在Windows 7中对其进行了预编译
python -m py_compile myfile.py
使用来自this链接的信息。我创建了“ myfile.pyc”
现在我想在使用python 2.7的python文件中使用它 因此,我使用来自this和this的信息并撰写
mod=imp.load_source('myfile.func', 'c:/folder1/folder2/myfile.pyc')
但是上面的陈述给了我例外
[name 'o' is not defined]
这是因为我在3.6和2.7中使用了预编译吗?
我在这里想念什么
答案 0 :(得分:1)
第一个python 3.6不向后兼容python 2.7。其次,通常更好的方法是正常导入模块,让编译器将缓存库代码作为已编译的字节码处理。另外,功能load_source
用于加载未编译的源文件,您需要的功能是load_compiled
。在这里检查
https://docs.python.org/2/library/imp.html
最后,如果您想提高性能,这只会帮助减少编译时间,并且仅在第一次编译时或在导入文件更改时。
答案 1 :(得分:0)
这是我的问题的完整解决方案。 (如果您不想浏览所有评论和讨论并想出解决方案,则可以这样做)
正如Garrigan Stafford先生恰当地指出的那样,我使用了错误的API来加载模块。
用于加载已编译模块的API是load_compiled
,而不是load_source
。
当我开始使用此API时,遇到了幻数错误:Bad magic number
。
发生这种情况的原因是,在创建文件时,编译器会插入某些值以基本上确定文件是什么。 (更多信息:can be found here。)
在我的情况下,编译我的库是3.6并在2.7中使用,这导致了问题。 为了克服这个问题,我基本上回到了原始代码,并在2.7中编译了我的lib,然后在客户端代码中使用了它。
Volla !!!!
现在一切正常。
感谢整个stackoverflow社区,特别是Stafford先生的帮助。