当前位置: 首页 > 面试题库 >

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

龙德海
2023-03-14
问题内容

我正在Windows上进行开发,但是到处搜索时都找不到任何人在谈论这种事情。

我在桌面上制作了一个C ++应用程序,该应用程序使用MSVC嵌入了Python
3.1。我链接了python31.lib,并将python31.dll包含在应用程序的运行文件夹中以及可执行文件旁边。效果很好。我的扩展程序和嵌入代码肯定有效,并且没有崩溃。

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

几个小时前,我在装有Python 2.6的
笔记本电脑上尝试了该应用程序。我的崩溃行为与我的朋友相同,并且通过调试发现失败的原因是Py_Initialize()调用。

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

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

除了DLL,我还需要什么?为什么在安装Python时它能工作,而在卸载它时却停止工作?听起来应该很琐碎;也许这就是为什么没人真正谈论它。但是,我无法真正解释如何处理此崩溃问题。

提前非常感谢您。


问题答案:

除了pythonxy.dll,您还需要整个Python库,即lib文件夹的内容,以及扩展模块,即DLLs文件夹的内容。没有标准库,Python甚至无法启动,因为它会尝试找到os.py(在3.x中;在2.x中是string.py)。在启动时,它将导入许多模块,尤其是site.py。

它在不同的位置搜索标准库。在您的情况下,它最终会在注册表中找到它。以前,使用可执行文件名称(通过Py_SetProgramName设置)来尝试查找界标;它还会检查文件python31.zip,该文件应为标准库的压缩副本。它还检查环境变量PYTHONHOME。

您可以自由地从不需要的内容中删除该库。有各种各样的工具可以静态地计算依赖关系(尤其是modulefinder)。

如果要减少文件数量,可以

  1. 将所有扩展模块静态链接到您的pythonxy.dll,甚至将pythonxy.dll静态链接到您的应用程序
  2. 使用冻结工具;这将允许将标准库的字节代码链接到您的pythonxy.dll中。
  3. (或者2)。将pythonxy.zip用于标准库。


 类似资料:
  • 问题内容: 我已经尝试了很多发布在网络上的解决方案,但是它们没有用。 因此系统可以找到_imaging,但仍不能使用truetype字体 引发此错误: 问题答案: 您安装的PIL编译时没有libfreetype。 您可以在此处获得PIL的预编译安装程序(与libfreetype一起编译)(以及许多其他预编译的Python C模块): http://www.lfd.uci.edu/~gohlke/p

  • 我刚刚通过自制完成了python最新稳定版本的安装。 安装python3 一切正常。我想安装包,例如PyMongo。我没有pip。 $pip-bash:pip:未找到命令 没有自制公式: $brew安装PyMongo brew安装PyMongo错误:没有可用的公式用于PyMongo搜索公式。。。正在搜索点击。。。 当Python通过自制软件安装时,你知道在OS X上安装Pymango的最佳方式是什

  • 因为 Python 是跨平台的,它可以运行在 Windows、Mac 和各种 Linux/Unix 系统上。目前,Python 有两个版本,一个是 2.x 版,一个是 3.x版,这两个版本是不兼容的。本草根安装的是 3.6.1 版本的。 至于在哪里下载,草根我建议大家最好直接官网下载,随时下载下来的都是最新版本。官网地址:https://www.python.org/ 1、windows 系统下安

  • 因为Python是跨平台的,它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序,放到Linux上也是能够运行的。 要开始学习Python编程,首先就得把Python安装到你的电脑里。安装后,你会得到Python解释器(就是负责运行Python程序的),一个命令行交互环境,还有一个简单的集成开发环境。 2.x还是3.x 目前,Python有两个版

  • 因为Python是跨平台的,它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序,放到Linux上也是能够运行的。 要开始学习Python编程,首先就得把Python安装到你的电脑里。安装后,你会得到Python解释器(就是负责运行Python程序的),一个命令行交互环境,还有一个简单的集成开发环境。 安装Python 3.8 目前,Python

  • 问题内容: 我的应用程序在仿真器中甚至在由android studio安装用于调试目的的真实设备中都运行良好,但是如果使用apk文件手动安装,则会崩溃。 我已经准备好粘贴其他任何代码,如需要的话,可以输入“活动”。 这是logcat: 问题答案: 只需转到: 并禁用。