问题标签 [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.

0 投票
4 回答
7296 浏览

python - 在多线程 C 应用程序中嵌入 python

我将 python 解释器嵌入到多线程 C 应用程序中,我对应该使用哪些 API 来确保线程安全感到有些困惑。

根据我收集到的信息,在嵌入 python 时,在调用任何其他 Python C API 调用之前,由嵌入器负责处理 GIL 锁。这是通过以下功能完成的:

但这似乎还不够。我仍然遇到随机崩溃,因为它似乎没有为 Python API 提供互斥。

在阅读了更多文档后,我还添加了:

就在调用之后,Py_IsInitialized()但这就是令人困惑的部分。文档指出此功能:

初始化并获取全局解释器锁

这表明当这个函数返回时,GIL 应该被锁定并且应该以某种方式解锁。但实际上这似乎不是必需的。有了这条线,我的多线程工作完美,并且功能保持互斥PyGILState_Ensure/Release
当我在应用程序在随后的调用中很快死锁PyEval_ReleaseLock()后尝试添加.PyEval_ReleaseLock()PyImport_ExecCodeModule()

那么我在这里错过了什么?

0 投票
2 回答
2018 浏览

python - (Python C API)PyRun_StringFlags 缺少内置函数?

我正在尝试在我的宠物项目中嵌入一些 python。我已将问题简化为以下代码:

(我知道我没有清理任何参考资料。这是一个例子。)

它可以编译为

如果我运行它,我会收到以下错误:

似乎未加载内置函数。我也import无能为力。我知道那__import__是缺失的。如何加载缺少的模块或我缺少的任何东西?

谢谢。

0 投票
0 回答
283 浏览

c++ - OpenCV - 运行嵌入到 C++ 中的 python 代码时获取不正确的 SURF 描述符

我正在开发一个利用 Kinect 深度信息的图像匹配器。我已经编写了很多代码,使用 OpenCV 在 Python 中进行标准图像匹配,但是为了使用 Kinect,我使用的是 OpenFrameworks(C++)。我没有重写我的 Python 代码,而是通过将它们嵌入到 C++ 代码中来运行我的脚本。

我有一个脚本,可以从一组图像中提取 SURF 特征并进行一些处理(聚类等)。当我使用 Python2.7 从命令行运行此脚本时,它工作正常。但是,当我通过我的 C++ 应用程序运行(嵌入)它时,所有 SURF 功能都有 90 度方向。

[结果应该是这样的] http://i.stack.imgur.com/0fGf8.png

【这是通过C++运行时的结果】 http://i.stack.imgur.com/ECPev.png

我认为可能是我包含的 Python.h 来自不同版本的 Python,但它肯定使用了正确的版本。

我将如何解决/调查这个问题?

0 投票
1 回答
4504 浏览

c++ - 如何将命令行参数作为字符串传递给从 C++ 执行的嵌入式 Python 脚本?

我有一个 C++ 程序,它公开了一个 Python 接口来执行用户的嵌入式 Python 脚本。

用户插入要运行的 Python 脚本的路径和命令行参数。然后脚本通过

要将命令行参数传递给 Python 脚本,我们必须通过 Python C-API 函数来设置它们

打电话之前exec_file()

但这需要对包含命令行参数的用户字符串进行标记以获取参数列表,然后通过PySys_SetArgv. 这不仅仅是浪费时间,因为通过这种方式,主 C++ 程序必须负责在不知道其背后的逻辑的情况下对命令行字符串进行标记,这仅在自定义用户的脚本中定义。

在元代码中,一种更好更简洁的方法是这样的:

我花了几个小时查看 Boost 和 Python C-API 文档,但没有发现任何有用的东西。你知道是否有办法实现这一点,即将一整串命令行参数从 C++ 传递给嵌入式 Python 脚本?


更新:

正如史蒂夫在下面的评论中建议的那样,我按照https://stackoverflow.com/a/8965249/320369解决了我对输入字符串进行标记的问题。

就我而言,我使用了:

因为我也希望能够解析包含字符串的元组,例如:

如果你使用:

与原始帖子一样,您没有正确标记引用的字符串。

0 投票
1 回答
1083 浏览

c - 在c中嵌入python时,什么会导致这个错误(“ImportError:No module name site”)?

我尝试运行这个简单教程的第一个示例,以了解如何在 c 应用程序中嵌入 python,但它描述了 Windows 中的所有内容,并且我在 Ubuntu Linux 中工作。

在第一次尝试中,我遇到了分段错误并在 Py_Initialize() 之前添加了两行来克服这个错误:

现在,当它想要 Py_Initialize() 时出现此错误:“ImportError: No module named site”。

我找到了一些这样的解决方案但它们不适合我吗?我能做些什么来解决这个问题?我也是 Python 的菜鸟。

0 投票
1 回答
1599 浏览

python - 从 Visual C++ 代码运行 Python(嵌入式 Python)

我有这个 Visual C++ 代码,加上嵌入的 Python,当我尝试使用以下代码运行外部 Python 代码时,我在调试模式下收到错误:

当 PyRun_File 函数通过 c++ 代码调用时,就会发生错误。
这是 C++ 函数:

这是我试图从 C++ 代码运行的外部 Python 脚本:

为什么 PyRun_File 函数会报错?

我对在 C++ 代码中嵌入 Python 了解不多,所以我非常感谢这里的一些指针。请记住,我对 Python 还比较陌生。我的大部分编程经验都在 Visual C++ 中。在这种情况下,将两者结合在一起的最佳方法是什么?

0 投票
1 回答
575 浏览

python - 如何将 PyFrameObject 转换为 PyObject

也许我错过了一些东西,但这里有一个问题:

我正在通过 C 扩展跟踪 python 代码,并且我的跟踪函数得到了 PyFrameObject* 框架。现在我想通过 Python 代码(嵌入或由 Cython 转换为 C)处理帧,但它处理 PyObject*。

如何将 PyFrameObject* 转换为 PyObject*?我在 frameobject.h 中找不到合适的转换函数。

谢谢。

0 投票
1 回答
474 浏览

c++ - 可能的内存泄漏

有人可以检查是否存在内存泄漏吗?我很困惑。

0 投票
1 回答
10070 浏览

python - 使用 Python.h 时,“AttributeError:‘模块’对象没有属性‘argv’”

当弄乱 Python.h 时,我收到了这个错误:

C++ 代码:

在 Python 中是:

我错过了什么?

0 投票
1 回答
110 浏览

c++ - C++ 和 boost::python

我可以仅使用 boost:python 将 python 嵌入到我的应用程序中吗?我需要任何额外的库来与我的应用程序一起使用吗?

或者是否有任何可嵌入的语言本身支持 unicode 字符并且不需要任何库来与应用程序一起使用