Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Python嵌入多平台C++;框架(JUCE)? 我用JULS设计音乐训练游戏——一个多平台C++框架,允许我对靠近线段的音频/视觉进行编码。_Python_C++_Embed_Embedding_Python Embedding - Fatal编程技术网

如何将Python嵌入多平台C++;框架(JUCE)? 我用JULS设计音乐训练游戏——一个多平台C++框架,允许我对靠近线段的音频/视觉进行编码。

如何将Python嵌入多平台C++;框架(JUCE)? 我用JULS设计音乐训练游戏——一个多平台C++框架,允许我对靠近线段的音频/视觉进行编码。,python,c++,embed,embedding,python-embedding,Python,C++,Embed,Embedding,Python Embedding,然而,我已经用Python编写了我的游戏(控制流/数据处理)——它很复杂,我希望不断地修改它,以便我可以尝试不同的游戏。Python非常适合这种快速原型制作工作 >我希望我的(平台独立,SunWOR/OSX/LI/iOS/和)C++启动Python运行时,给它一个.pyfile,然后调用它中的各种函数。此外,我希望能够从.p../p>返回到C++代码。 以下是相关的官方Python文档: 下面是一篇CodeProject文章: 然而,它们似乎都没有解决多平台的问题 该技术似乎与libpytho

然而,我已经用Python编写了我的游戏(控制流/数据处理)——它很复杂,我希望不断地修改它,以便我可以尝试不同的游戏。Python非常适合这种快速原型制作工作

<> >我希望我的(平台独立,SunWOR/OSX/LI/iOS/和)C++启动Python运行时,给它一个.pyfile,然后调用它中的各种函数。此外,我希望能够从.p../p>返回到C++代码。 以下是相关的官方Python文档:

下面是一篇CodeProject文章:

然而,它们似乎都没有解决多平台的问题

该技术似乎与libpython.a和#include库相链接,其中包含启动运行时环境、加载脚本、执行python代码等各种函数

但是这个libpython.a肯定需要在每个平台上分别编译吗?如果是这样,这将不是一个非常干净的解决方案,那么我是否可以将Python源代码添加到我的项目中,并让它编译.a

我该怎么做呢

编辑:

EDIT2:我敢肯定,在这里尝试引入完整的CPython源代码有点过火了——一定有人用C/C++开发了一些精简的Python实现,它不支持任何系统调用/多线程/奇特的东西——只是逐行通过Python语法工作。仔细看了一下,但我看不到一个明显的候选人

EDIT3:应该添加到最后一页,但它看起来并不是我想要的

有一个例子解释了将Python解释器嵌入到另一个应用程序中的不同方法

嵌入Python与扩展Python类似,但并不完全相同。这个 不同之处在于,当您扩展Python时 应用程序仍然是Python解释器,而如果嵌入 Python,主程序可能与Python无关-相反, 应用程序的某些部分偶尔会调用Python解释器 运行一些Python代码

因此,如果您正在嵌入Python,那么您将提供自己的主 节目。这个主程序必须做的事情之一就是初始化 Python解释器。至少,你得打电话给 函数
Py\u Initialize()
。有一些可选的调用传递命令 Python的行参数。然后,您可以稍后从呼叫口译员 应用程序的任何部分

调用解释器有几种不同的方法:您可以传递 包含Python语句的字符串,用于
PyRun\u SimpleString()
,或者 可以传递stdio文件指针和文件名(用于在 仅错误消息)发送到
PyRun\u SimpleFile()
。你也可以打电话给 前几章中描述的要构造的较低级别操作 并使用Python对象

目录中可以找到嵌入Python的简单演示 演示/嵌入/源发行版


我最近决定创建一个将C++与Python混合的项目,从而获得两个世界的最好。我的想法是在Python中快速地进行类和函数的快速原型制作,原因显而易见,但仍然能够在Python中调用C++代码(也有明显的原因)。因此,不要将Python嵌入C++框架中,而是建议您做相反的操作:将C++框架嵌入到Python项目中。为了做到这一点,您只需编写非常简单的接口文件,并让Swig负责接口部分

如果你想从头开始,有一个很好的工具叫做,可以用来生成项目模板。您可以选择cookiecutter pypackage或cookiecutter pylibrary,后者优于前者。有趣的是,您还可以使用CooKiCeCe代码生成C++项目的结构。这个空项目使用CMASTE构建系统,IMRO是开发独立于平台的C++代码的最佳框架。然后,我必须决定这个混合项目的目录结构,因此详细描述了这一点。祝你好运

>我使用Python嵌入到C++应用程序中,并扩展它,即在我的应用程序之外在Python中访问C++ API。SWIG和Python是多平台的,所以这不是一个真正的问题。SWIG的主要优点之一是它可以为许多语言生成绑定。也有很多C++代码包装器可以使用,例如BooSt.Python或Cython。 请检查以下链接,以便:


或者,您也可以使用简单的Python/C API。

我已经阅读了本文档;它说我必须将“libpython.a”链接到我的C/C++项目,然后#包括“python.h”,然后我将有权访问Py_Initialize()和朋友。但是我不喜欢为我的目标平台提供不同的libpython.a。@Pi:你不明白链接是什么意思吗?您不提供
libpython.a
。如果您正在分发二进制文件,您的程序将有
libpython.a
静态链接到其中。如果您正在分发源代码,那么您的程序可能需要一个Python开发环境来进行链接。依赖系统Python是一条疯狂之路。在windows上,您不知道他们安装了什么版本,以及安装在哪里。在Mac和Linux boxen上,虽然有很好的机会让你拥有2.7,但你不能保证它,也不能保证它是以适合你的软件的方式构建的。您最好使用自己的python静态链接。这样,您就可以完全控制依赖关系。那样比较容易。它只是另一个依赖项,您的构建系统只需要将它添加进去