相关疑难解决方法(0)

使用Python嵌入的C++:如果未安装Python,则会崩溃

我正在Windows上开发,我搜索到的所有地方都没有找到任何人谈论这种事情.

我在桌面上制作了一个C++应用程序,它使用MSVC嵌入了Python 3.1.我将python31.lib与应用程序运行文件夹中的python31.dll一起包含在可执行文件中.它很棒.我的扩展和嵌入代码肯定有效,没有崩溃.

我将run文件夹发送给没有安装Python的朋友,在脚本设置阶段,应用程序崩溃了.

几个小时前,我在安装了Python 2.6的笔记本电脑上试用了这个应用程序.我得到了与我的朋友相同的崩溃行为,并通过调试发现它是Py_Initialize()调用失败.

我在笔记本电脑上安装了Python 3.1而没有更改应用程序代码.我跑了它,它完美运行.我卸载了Python 3.1并且应用程序再次崩溃.我在我的应用程序中放入代码以从本地python31.dll动态链接,以确保它正在使用它,但我仍然得到崩溃.

我不知道解释器是否需要比DLL更多启动或什么.我无法找到任何资源.Python文档和其他指南似乎没有解决如何在不让用户在本地安装Python的情况下分发使用Python嵌入的C/C++应用程序.我知道它在Windows上比在Unix上更多的是一个问题,但是我已经看到许多在本地嵌入Python的Windows C/C++应用程序,我不确定它们是如何做到的.

除了DLL之外我还需要什么?为什么我安装Python然后在卸载时停止工作呢?听起来应该是如此微不足道; 也许这就是没有人真正谈论它的原因.不过,我无法解释如何处理这个崩溃问题.

非常感谢你提前.

c++ python embed dll distribution

22
推荐指数
4
解决办法
1万
查看次数

无法嵌入python以使用zip'd库

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

这篇文章似乎描述了这个过程,除了它对我不起作用.

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

Py_SetProgramName(argv[0]);  /* optional but recommended */
Py_SetPythonHome("Python27");
Py_Initialize();
Run Code Online (Sandbox Code Playgroud)

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

但是,如果我压缩本地Python27文件夹,代码将停止运行,并显示"ImportError:No module named site".

PEP273让它看起来应该只是工作,但我尝试过的一切都失败了.

任何人都可以阐明如何从zip文件中运行嵌入式python?

鉴于有相关的问题没有得到解答,我认为如果人们成功地从zip文件中读取文件,即使他们不确定我可能需要修复的内容,也会有所帮助.

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

更新:无论我尝试什么(即使建议使用LoadLibrary),我也可以从完全解压缩的目录运行我的程序.任何时候我用DLLs/*和Lib/*删除目录并放入Python27.zip,我只是得到

ImportError: No module named site
Run Code Online (Sandbox Code Playgroud)

python python-2.7

7
推荐指数
1
解决办法
3663
查看次数

标签 统计

python ×2

c++ ×1

distribution ×1

dll ×1

embed ×1

python-2.7 ×1