从另一个文件调用预编译模块
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 先生的帮助。
主要是我是 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 先生的帮助。