问题标签 [python-embedding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 在 Qt 5 中嵌入 Python
我想将 Python 解释器嵌入到 Qt 5 应用程序中。
我在 Qt 5 中有一个工作应用程序,但是当我把
在顶部(Qt 标头下方)编译中断为
当我将 Python 标头放在 Qt 标头上方时,它会中断
请问,有谁知道为什么会这样?我可能是因为 Qt 和 Python 定义了一些常用词?我能做些什么呢?
python - 将 C 对象添加到 Python 列表并将 C 对象列表返回给 python
我正在为 python 编写 C 扩展。
我想知道如何使用PyList_SetItem
. 例如,
我有一个 C 对象。
我列了一个清单:
我不确定以下语句中的第三个参数必须是什么。
另外,我如何将这个 C 对象列表返回给 python。
python - 第二次python执行失败
我在为需要在 python 中运行自定义脚本的应用程序嵌入 python 3 引擎时遇到问题。由于脚本可能完全不同,有时是用户提供的,我试图使每个执行隔离,并且不需要在不同脚本的执行之间保留任何数据。
所以,我的解决方案是将每次执行包装在Py_Initialize
和之间Py_Finalize
。它看起来像这样:
但是,对于特定的 python 脚本,这在第二次执行脚本时会失败:
python 脚本如下所示:
如您所见,脚本第一次执行时“完成!” 被打印出来了。但是第二次它在复制函数内部引发了一个异常。
看起来 python 引擎在第一次初始化完成后处于某种奇怪的状态。注意,这是python 3。
另外,值得注意的是 Python 2.7 没有这个问题。
我想可能还有其他例子可以更好地揭示正在发生的事情,但我还没有时间找到。
测试项目的完整来源可以在这里找到: https ://docs.google.com/file/d/0B86-G0mwwxZvNGpoM1Jia3E2Wmc/edit?usp=sharing
请注意,该文件为 8MB,因为它包含 python 发行版。
任何关于如何解决这个问题的想法都值得赞赏。
编辑:我还放了一个包含标志的项目副本以在 Python 3 和 Python 2.7 之间切换(文件为 31 MB):https ://docs.google.com/file/d/0B86-G0mwwxZvbWRldTd5b2NNMWM/edit?usp=分享
编辑:嗯,我用 Python3.2 测试过,效果很好。所以它似乎只是 Python3.3 中的错误。添加为问题:http ://bugs.python.org/issue17408#
c++ - 在 C++ 中嵌入 python,我需要安装 python
将 python 嵌入到 C++ 应用程序中时,使用
并链接 -lpython2.6
目标计算机(运行最终编译程序的计算机)是否需要安装 python 才能使用我的应用程序?
谢谢
c++ - python嵌入后类型转换为结构
我在 C++ 程序中嵌入了一个小的 python 脚本。在将 python 对象暴露给 C++ 程序并将值复制到 C++ 变量后,我尝试将其类型转换为结构,但我没有得到预期的值。这里有什么问题?] 我正在使用 python 进行套接字编程以将数据从一个系统发送到另一个系统。
代码看起来像这样。
但是输出与分配的值不同。谁能解释什么是错的?
提前致谢。
c++ - Python嵌入项目中的VC ++ 6“未解决的外部”
我在 Visual C++ 6 上遇到了这个奇怪的链接器错误(我没有选择该工具)。我什至不知道从哪里开始看这个(我的 C++ 经验有限)。这些是错误:
这是CPythonPg.h:
这是CSripting.h:(我没有创建这个类,除了将实例添加到我的类 CPythonPg 之外,我无法更改它)
什么可能导致这种类型的错误?
编辑:修正了一些错别字。
boost-python - Boost python,使用命名空间调用函数对象
我正在使用 boost python 在我的 C++ 应用程序中嵌入 python。
我希望能够调用 boost python 函数对象,并将全局名称空间与该函数调用相关联。具体来说,简化后的相关代码为:
我知道当我使用 boost python exec() 函数时,我可以在全局命名空间中发送,如上所示。我的问题是当我调用 py_fn 时如何将 main_namespace 与 python 函数相关联?我的最终目标是将来自 runPyProg 的局部变量放在 main_namespace 中。
谢谢你。
c++ - boost python,使用除 main global 之外的命名空间
我正在使用 boost python 将 python 嵌入到我的 C++ 应用程序中。我是一名 C++ 程序员,对 Python 的了解非常有限。
我有一个 C++ 类,PyExpression
. 此类的每个实例都有一个字符串expStr
,它是一个简短的用户输入(在运行时)python 程序,通过调用来执行boost::python::exec
。简而言之,我将其设置为:
其中main
和main_namespace
是 C++ 类的成员PyExpression
。
这里的问题是,不同的 C++ 实例PyExpression
修改了相同的全局 python 命名空间,main_namespace
我希望每个PyExpression
实例都有自己的“全局”命名空间。
如果我通过boost::python::dict class_dict
而不是main_namespace
上面,它在基本级别上工作。但是如果PyExpression::expStr
导入一个模块,例如import sys
,那么我会得到一个ImportError
. 此外,使用class_dict
, 我不能再调用globals()
, locals()
, vars()
, 因为它们都变得未定义。
我也尝试过暴露PyExpression
为 python 模块。简要地,
不幸的是,使用PyExp_namespace
,当要执行的字符串导入 python 模块时,我再次得到 ImportError ,并且再次,命名空间在所有实例之间共享PyExpression
。
简而言之,我希望能够使用命名空间对象/字典,最好是 的类成员PyExpression
,只有该实例PyExpression
可以访问命名空间,并且命名空间可以像全局命名空间一样使用其他模块导入,并且 `globals(), locals(), vars() 都已定义。
如果有人能指出我的工作代码草图,我将非常感激。我找不到关于这个问题的相关材料。
python-c-api - 嵌入时python函数的动态arg类型
我正在向 Exim 添加一个嵌入式 python 解释器。我已经复制了嵌入式 perl 接口,并希望 python 与长期以来编码的嵌入式 perl 解释器一样工作。目标是允许系统管理员使用强大的脚本语言(即python)执行复杂的功能,而不是尝试使用exim 的标准ACL 命令,因为使用exim ACL 语言执行相对简单的事情会变得相当复杂。
在撰写本文时,我当前的代码位于http://git.exim.org/users/tlyons/exim.git/blob/9b2c5e1427d3861a2154bba04ac9b1f2420908f7:/src/src/python.c。它可以正常工作,因为它可以导入系统管理员的自定义 python 代码,调用其中的函数,并处理返回值(仅限简单返回类型:int、float 或 string)。但是,它还没有处理传递给 python 函数的值,这是我的问题开始的地方。
Python 似乎要求使用 c api 将我传递给嵌入式 python 函数的任何参数显式转换为 int、long、double、float 或 string 之一。问题是系统管理员可以在嵌入的 python 代码和 exim 的 c 方面放入任何东西,我不知道这些变量类型是什么。我知道 python 是动态类型的,所以我希望在将值传递给嵌入式代码时保持这种合规性。但在我的测试中它不是这样工作的。
使用以下基本的超简单 python 代码:
...而我的 exim ACL 语言的调用代码是:
在下面的 c 代码中,为简洁起见,省略了引用计数。 count是我传递的参数数量:
是的,**arg 是一个指向字符串数组的指针(在这个简单的例子中是两个字符串)。问题是这两个值在 python 代码中被视为字符串,因此该 c 代码执行嵌入式 python 的结果是:
如果我将python更改为:
然后该 c 代码执行 python 代码的结果与预期的一样:
我的目标是我不想强迫 python 用户手动将他们传递给嵌入式 python 函数的所有数字参数强制转换。如果有一个 PyDynamicType_FromString(),而不是 PyString_FromString(),我会欣喜若狂。Exim 的嵌入式 perl 解析 args 并自动进行转换,我希望嵌入式 python 也能做到这一点。任何人都可以建议 python 是否可以执行此 arg 解析以提供我期望的动态类型?
或者,如果我想保持这种动态类型,我唯一的选择是解析每个 arg 并猜测将其转换为的类型吗?我真的真的真的很希望避免这种方法。如果涉及到这一点,我可能只是记录“所有传递的参数都是字符串,所以如果你真的想传递数字,你必须用 int()、float()、double() 或 long() 转换所有参数” . 然而,后面总是有一个逗号,我觉得这种方法会使我的实现中强大的 python 编码器变得糟糕。我也想避免这种情况。
除了“将您的应用程序变成 python 模块”之外,任何和所有建议都将受到赞赏。
python - 带有关键字参数的 PyObject_CallMethod
我试图在我的 C 应用程序中嵌入一个 Python (2.7) 库,并且我正在使用 Python/C API 从 C 调用 Python 代码。我需要调用一个接受关键字参数的 Python 方法。从语义上讲,我试图在 Python 中实现与以下行等效的内容:
通过阅读文档,我设法做到了以下几点,但这并没有传递关键字参数:
我对 Python 不是很熟悉,我有点卡在这一点上,因为文档对此并不完全清楚,而且谷歌搜索也没有找到太多有用的信息。我会很感激任何帮助。