从另一个文件调用预编译模块

时间:2018-08-13 14:21:16

标签: python import pre-compilation

主要是我是c ++开发人员,试图为我使用python执行某些任务。 我在python 3.6中制作了一个python模块,并使用以下命令在Windows 7中对其进行了预编译

 python -m py_compile myfile.py

使用来自this链接的信息。我创建了“ myfile.pyc”

现在我想在使用python 2.7的python文件中使用它 因此,我使用来自thisthis的信息并撰写

mod=imp.load_source('myfile.func', 'c:/folder1/folder2/myfile.pyc')

但是上面的陈述给了我例外

[name 'o' is not defined]

这是因为我在3.6和2.7中使用了预编译吗?

我在这里想念什么

2 个答案:

答案 0 :(得分:1)

第一个python 3.6不向后兼容python 2.7。其次,通常更好的方法是正常导入模块,让编译器将缓存库代码作为已编译的字节码处理。另外,功能load_source用于加载未编译的源文件,您需要的功能是load_compiled。在这里检查 https://docs.python.org/2/library/imp.html

最后,如果您想提高性能,这只会帮助减少编译时间,并且仅在第一次编译时或在导入文件更改时。

What is __pycache__?

答案 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先生的帮助。