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

calling precompiled module from another file

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

 python -m py_compile myfile.py

使用来自 this link 的信息。我创建了 "myfile.pyc"

现在我想在使用 python 2.7 的 python 文件中使用它 所以,我使用来自 this and 的信息并写成

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

但是上面的语句给了我例外

[name 'o' is not defined]

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

我错过了什么

首先 python 3.6 不向后兼容 python 2.7。其次,通常最好像往常一样导入模块,让编译器将缓存库代码作为编译后的字节码来处理。另外函数 load_source 用于加载未编译的源文件,你想要的函数是 load_compiled。在这里查看 https://docs.python.org/2/library/imp.html

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

What is __pycache__?

这是我的问题的完整解决方案。 (如果您不想通过所有评论和讨论并找出解决方案)

正如 Garrigan Stafford 先生恰当地指出的那样,我使用了错误的 API 来加载模块。

用于加载已编译模块的 API 是 load_compiled 而不是 load_source

当我开始使用这个API时,运行进入了幻数的错误:Bad magic number。 发生这种情况是因为在创建文件时,编译器会插入某些值来基本上识别它是什么文件。 (更多信息:can be found here。)

就我而言,编译我的库是 3.6 并在导致问题的 2.7 中使用。 为了克服,我基本上回到了原始代码并在 2.7 中编译了我的库,然后在客户端代码中使用它。

波拉 !!!!

现在一切正常。

感谢整个 Whosebug 社区,特别感谢 Stafford 先生的帮助。