从嵌入式python的zip中加载pyd文件

Ale*_*ten 6 python zip py2exe cython visual-c++

我可以通过在扩展sys.path以包含zip文件之后从Python解释器调用"import some_module"从zip文件加载Python模块(.py,.pyc,.pyd)并且仅在我运行之后

import zipextimporter
zipextimporter.install()
Run Code Online (Sandbox Code Playgroud)

后者是.pyd模块所必需的.

我还可以从嵌入在C++中的Python加载Python .py和.pyc模块.但是,为了从嵌入式Python中加载.pyd模块,我添加了

PyRun_SimpleString("import zipextimporter");
Run Code Online (Sandbox Code Playgroud)

C++ exe超出此行而没有错误.但是下一个命令

PyRun_SimpleString("zipextimporter.install()");
Run Code Online (Sandbox Code Playgroud)

给我这个错误:

在此输入图像描述

嵌入Python时为什么zipextimporter.install()会崩溃?

我怎么解决这个问题?

它可能与编译C++代码的方式有关吗?我用g ++:

g++ embed-simple.cpp -IE:\Python27\include -LE:\Python27\libs -lpython27 -o embed-simple

我看到一个链接 如何链接msvcr90.dll与mingw gcc?

这能提供解决方案吗?如果是的话,我应该如何调整它,gcc - > g ++,因为我正在运行C++代码,而不是C.

我在WinXP上运行Python 2.7.2.

在干净安装Python 2.7.2后,我没有得到运行时错误,只是这样:

导入错误:没有名为....的模块

嵌入C++脚本的编译方式是否重要?我用过g ++.我也用英特尔编译器编译,但是给出了相同的运行时错误.也许我应该尝试MS Visual C++.

或者使用ctypes导入pyd?

the*_*ler 5

memimporter和zipextimporter确实能够从内存/ zip-archives中加载.pyd文件,而无需将它们解压缩到文件中.

runtimerror R6034是由必须通过清单加载VC9运行时库引起的.在Python 2.5中运行代码,使用不同的C运行时,很可能会成功.我想你必须在你的exe中嵌入一个引用VC9运行时库的清单; 也许py2exe wiki可以提供一些指导.


Mik*_*maa 4

PYD 文件是具有重命名扩展名的本机 DLL 文件。加载它们依赖于操作系统设施和操作系统限制。

Windows XP 或据我所知的任何操作系统都无法从 ZIP 文件加载 DLL 文件,因此您无法从 ZIP 文件加载 PYD 文件。