gpt4 book ai didi

python - 无法嵌入 python 以使用压缩库

转载 作者:太空狗 更新时间:2023-10-29 22:26:49 24 4
gpt4 key购买 nike

我正在尝试嵌入 python,并提供 python 库的 dll 和 zip,而不使用任何已安装的 python。也就是说,如果用户没有 python,我希望我的代码能够使用提供的 dll/zip。

post似乎描述了这个过程,但它对我不起作用。

如果我运行以下命令,只要我有 Python27.dll 和名为 Python27 的包含 DLL 和 Lib 文件夹的文件夹,我的代码就会运行。

Py_SetProgramName(argv[0]);  /* optional but recommended */
Py_SetPythonHome("Python27");
Py_Initialize();

如果我删除 Python27 文件夹,代码将失败 - 所以我拉入本地副本,而不是任何已安装的 python。

但是,如果我压缩本地 Python27 文件夹,代码将停止运行,并显示“ImportError:没有名为站点的模块”。

PEP273听起来这应该行得通,但我尝试过的一切都失败了。

谁能阐明如何让嵌入式 python 从 zip 文件运行?

鉴于有一些相关的问题没有得到解答,我认为如果人们成功地从 zip 文件读取工作时添加评论会很有帮助,即使他们不确定我可能需要什么使固定。

这至少可以帮助我了解我是否应该继续寻找答案!

更新:无论我尝试什么(即使按照建议使用 LoadLibrary),我都可以从完全解压缩的目录运行我的程序。每当我删除带有 DLLs/* 和 Lib/* 的目录并放入 Python27.zip 时,我都会得到

ImportError: No module named site

最佳答案

我有两个问题。

没有很好记录的“Py_NoSiteFlag”修复了

ImportError: No module named site

第一个问题。接下来,我必须更新路径。最后,我得到了以下初始化:

Py_NoSiteFlag=1;
Py_SetProgramName(argv[0]);
Py_SetPythonHome(".");
Py_InitializeEx(0);
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path = ['.','python27.zip','python27.zip/DLLs','python27.zip/Lib','python27.zip/site-packages']");

[编辑以解决评论中的问题]加载 zip 文件后,您仍然需要将文件传递给 python 引擎。这是我使用的(不包括参数和文件存在性检查)。

PyObject* PyFileObject = PyFile_FromString(argv[1], "r");
int res = PyRun_SimpleFile(PyFile_AsFile(PyFileObject), argv[1]);

[/编辑]

关于python - 无法嵌入 python 以使用压缩库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18428600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com