嵌入 Python Zip 文件会引发错误?

Posted

技术标签:

【中文标题】嵌入 Python Zip 文件会引发错误?【英文标题】:Embed Python Zip file throws error? 【发布时间】:2016-02-27 06:53:18 【问题描述】:

我正在尝试将 python zip 文件嵌入到我的应用程序中。 我从 python 站点下载了 zip 文件(win32 的)。

这是我用来设置python路径的代码

#include <Python.h>
...
std::wstring exe_dir = L"\\exe\\path";
std::wstring python_path;
python_path += exe_dir + L"python-3.5.1-embed-win32.zip";
Py_SetPath(python_path.c_str());

Py_Initialize(); // Error : "Py_Initialize: unable to load the file system codec"

...

但无论我做什么,应用程序总是抛出相同的错误。 即使我玩各种路径。

如何将 zip 文件嵌入到我的应用中?

【问题讨论】:

【参考方案1】:

“python-3.5.1-embed-win32.zip”里面还有另一个zip文件

python35.zip

而那个文件就是需要添加的。

#include <Python.h>
...    
std::wstring exe_dir = L"\\exe\\path";
std::wstring python_path;
python_path += exe_dir + L"python35.zip";
Py_SetPath(python_path.c_str());

Py_Initialize();    
...

我很想知道其他文件的用途,(或者如果这是使用它的正确方法)...

【讨论】:

我创建了一个blog post,其中包含指向 python 的链接和要遵循的步骤。【参考方案2】:

要回答关于嵌入式发行版中“其他文件的用途”的最后一个问题,您会在某些导入中看到错误。我在导入 NumPy / SciPy 时遇到错误,因为 Python35.zip 之外的其中一个文件丢失了 - _ctypes.pyd。还发现小文件pyvenv.cfg必须至少在 Python 3.5.2 上位于您的 EXE 旁边,这只是一个显示applocal = true 的文本文件。当然你需要python35.dll当然...

【讨论】:

以上是关于嵌入 Python Zip 文件会引发错误?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Discord.py 在有权限的情况下发送嵌入频道会引发异常

Python 可嵌入 zip:安装 Tkinter

没有pip的嵌入式Python手动安装包

嵌入式 Python3 在导入本地模块时引发异常

嵌入式 Python 无法使用 NumPy 指向 Python35.zip - 如何修复?

加载嵌入式 DLL 时引发 System.ExecutionEngineException