如何在未安装 python 的系统上嵌入 python 代码来执行 C++ 代码

Posted

技术标签:

【中文标题】如何在未安装 python 的系统上嵌入 python 代码来执行 C++ 代码【英文标题】:How to execute a C++ code with a python code embedded on a system without python installed 【发布时间】:2014-05-05 16:52:45 【问题描述】:

我正在尝试使用带有 Python 嵌入的 C++ 创建一个简单的游戏。 python 代码嵌入在我的 C++ 代码中。我为此使用了 Python/C API。 我想实现两个目标:

1) 应用程序应该能够在没有安装 Python 的计算机上运行。

2) 应用程序应该是一个独立的可执行文件(.exe)

例如,下面的简单代码只有在系统已经安装了 python 的情况下才有效:

#include <Python.h>
#include <conio.h>
#include <stdio.h>

int main()

char pySearchPath[] = "Python27"; 
Py_SetPythonHome(pySearchPath); 

Py_Initialize();
PyRun_SimpleString("print 'Hello World'");
PyRun_SimpleString("for i in range(5):\n"
    "\tprint i,\n");
Py_Finalize();
getch();
return 0;

需要在计算机上安装 Python 或者这些文件应该在可执行文件的目录中:

        python27.dll
        Python27\
            DLLs\ (contents of DLLs folder)
            Lib\ (contents of Lib folder)

问题:如何在我的.exe 中包含/添加/绑定这些文件,以便我的应用程序可以在没有安装 python 的系统上执行?我想要一个独立的可执行文件。是否可以?如果是,那么请提供一些有关如何完成此操作的提示?我已经花了很多时间在互联网上搜索,但不幸的是我没有找到任何有用的东西。

可能还有其他可能解决这个问题,但我不确定。比如下面的方法能行吗?

Python-Code ----transforming----> bytecode -----> native code -------> import in programm

UPD:我使用 Cython 生成 .pyd 文件 (.dll)。如何从其生成 .h 文件或在我的应用程序中调用某些函数(当然,如果可能的话)?

谢谢。

【问题讨论】:

能不能不用py2exe py2exe.org/index.cgi/FAQ? 据我所知,py2exe 将“干净”的 .py(!) 转换为 .exe。或者 py2exe 怎么可能? 完全可以在 py2exe 输出文件中包含 DLL,这就是 Dropbox 客户端所做的。 我想,你不理解我,或者我不理解你。我在 C++ 上的主要应用程序和仅嵌入了 Python 脚本。所以,我不能在 py2exe 中转换 .cpp。可能是我错了。 @Dmitry_Mahrachev 不要向这个问题添加新问题。最好创建一个新问题并将其发布。然后你可以把这两个问题联系起来。 :) 【参考方案1】:

是的,您可以在 C++ 中嵌入 python。 谷歌为我提供了两个我认为对你有用的链接。我不确定您是否已经知道这些链接,因为您在关于您的研究的问题中没有提到。

http://www.codeproject.com/Articles/11805/Embedding-Python-in-C-C-Part-I这个链接有两部分关于这个主题的教程。

http://realmike.org/blog/2012/07/05/supercharging-c-code-with-embedded-python/这个链接也在讨论同样的话题。

基本上避免在答案中粘贴站点链接。但不幸的是,您的问题的答案太长了,我不得不在这里提供链接。对此感到抱歉。为了安全起见,您应该从这些链接中下载整个教程,以免以后教程离线时您不会后悔!

【讨论】:

谢谢。但我看到了(和许多其他的)教程。我的问题不是“我可以嵌入...”,而是“如何在不安装 Python 的情况下启动应用程序”。 我认为不可能这样做。如果某些应用程序需要 python,那么它必须安装在系统上。我也可能是错的。但是,如果您不幸没有找到任何解决方案,那么您可以在您的应用程序开始时显示一个横幅,说明需要 python 才能使用此应用程序。然后用户将安装python他/她自己。许多已知的游戏也是如此。例如:如果游戏需要 direct-x 或 .net,他们只需显示横幅并要求用户安装或跳过它。是的,这很烦人,但目前我没有解决方案。 :( 我的游戏很简单。您可能知道,我可以(以及如何)通过 python 生成 C++ 代码的字节码吗?横幅 - 很好,但这是我的大学工作,我的讲师不会对此感到高兴,因为我的主题是两种语言本身的联系 =( 对不起,我有点糊涂了。澄清一下,最后你有一个 C++ 代码,其中包含一些 python 代码。现在你想要的只是在没有安装 python 的系统上运行这段代码?这就是你想要的?这是正确的吗? @Dmitry_Mahrachev 我编辑了你的问题并说清楚了。同时,我希望有人可以回答或提供一些提示。如果您认为我的编辑不准确或遗漏了某些内容,请随时编辑您的问题并添加您认为我可能错误地遗漏或忘记的内容。我也会寻找解决方案,当我得到一些东西时,我会回来的。万事如意!

以上是关于如何在未安装 python 的系统上嵌入 python 代码来执行 C++ 代码的主要内容,如果未能解决你的问题,请参考以下文章

如何在未标记的数据上微调 BERT?

怎么安装python

在嵌入式linux上使用python可以套接字,绑定行为不端

是否可以将 Jedi 嵌入到未安装 Python 的系统上的应用程序中?

osx系统安装python3

如何在未安装 CUDA 工具包的机器上运行已编译的 CUDA 代码?