1

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

 python -m py_compile myfile.py

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

现在我想在使用 python 2.7 的 python 文件中使用它,所以我使用来自这个这个的信息 & 写

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

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

[name 'o' is not defined]

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

我在这里想念什么

4

2 回答 2

1

首先 python 3.6 不向后兼容 python 2.7。其次,通常更好地导入模块并让编译器将缓存库代码作为编译字节码处理。该函数load_source还用于加载未编译的源文件,您想要的函数是load_compiled. 检查这里 https://docs.python.org/2/library/imp.html

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

什么是__pycache__?

于 2018-08-13T17:14:34.297 回答
0

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

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

用于加载已编译模块的 API 是load_compiled & not load_source

当我开始使用这个 API 时,遇到了幻数的错误:Bad magic number. 发生这种情况是因为在创建文件时,编译器会插入某些值以基本上识别它是什么文件。(更多信息:可以在这里找到。)。

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

沃拉!!!!

现在一切正常。

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

于 2018-08-16T04:39:22.913 回答