问题标签 [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 投票
2 回答
2347 浏览

python - 在初始化时嵌入python错误

当我运行 C 代码调用 python 函数时, Py_Initialize() 出现错误 错误是 ImportError: No module named site. 我试图把 Py_SetProgramName(argv[0]) 但它不起作用。cmd调用是cInterfacePython Test.py multiply 3 2 (exe是cInterfacePython)

0 投票
0 回答
172 浏览

python-3.x - ESX 4.0 中的 SFCB、python 绑定层和 python 提供程序存在问题

我们正在用 python 编写 SFCB 提供程序,由于 SFCB 只与 C++ 提供程序对话,我们需要一个中间层(cmpi-bindings,一个 python 扩展模块),它可以与 SFCB 对话并在需要时启动提供程序。

相同的 cmpi 层在 ESX 4.1 上运行时完全正常(即读取 SFCB 调用然后运行 ​​python 提供程序),但在 ESX 4.0 上它无法导入 python 模块。

经过一些调试,我发现导入 datetime 模块失败,出现未解析的符号 (PyExc_IOError) 错误。我尝试使用 -XLinker --exportdynamic 构建这些模块,以便它们按照嵌入在应用程序中的 Python 解释器中的建议查找那些未解析的符号,无法加载本机模块,但徒劳无功。

接下来我可以尝试哪些选项。(因为相同的代码库适用于 4.1 但不适用于 4.0)。任何指示都会有所帮助

0 投票
1 回答
2196 浏览

python - Python 3 解释器在嵌入时会泄漏内存吗?

此错误报告指出,截至 2007 年 6 月,Python 解释器在具有嵌入式 Python 解释器的 C/C++ 应用程序中调用 Py_Finalize 后不会清理所有分配的内存。建议在应用程序终止时调用 Py_Finalize 一次。

此错误报告指出,截至 3.3 版和 2011 年 3 月,解释器仍然泄漏内存。

有谁知道这个问题的当前状态?我很担心,因为我有一个应用程序,在该应用程序中,每个运行实例都会多次调用解释器,并且我遇到了内存泄漏。

我已经在使用 boost::python 来处理引用计数,并且我清除了在两次运行之间运行 Python 程序创建的所有引用的全局字典。我有一些单身课程 - 这些可能是问题吗?

这是一个易于处理的问题还是 Python 解释器中的错误?

0 投票
4 回答
3920 浏览

iphone - iPhone上的线性代数(python/numpy?)

这个学期,我将一个压缩感知算法实现为一个 iPhone 应用程序。为此,我需要一些好的矩阵/线性代数库。我对 iOS 和 Python 都有点陌生,正在寻求一些帮助来评估我的选择。

我知道 iPhone 有Accelerate框架,其中包括 vecLib、BLAS 和 LAPACK,但我不熟悉它们的 API(而且它们看起来相当混乱)。

我玩过 Python/numpy,我真的很喜欢它的简单易用性——如果可以选择,我更喜欢使用 numpy 而不是 Accelerate。

我知道嵌入 Python 是可能的,但我自己的运气并不好。我尝试将 Enthought 的 EPD.framework 包含在 XCode 项目中,但在玩了一个小时左右后并没有让它工作。我想编译 numpy 会更糟。

作为另一种选择,我可以使用 Cython (http://cython.org/) 生成 C 文件然后从中调用函数吗?我也尝试过这个,但是在包含 .so 库并调用它时遇到了更多问题。有没有办法让 Cython 生成 .c 和 .h 文件?会说.c和.h文件仍然依赖于numpy吗?

我读过一些关于 PyInstaller 和 freeze.py 的东西。这些中的任何一个都可以帮助我吗?

除了 Accelerate 或 Python+numpy 之外,还有其他选择吗?Python+numpy 是一个不错的选择,还是很难编译/构建?Cython 是一个有效的解决方案吗?

谢谢!

0 投票
0 回答
1764 浏览

qt-creator - Boost-Python:从文件执行脚本时崩溃

当我的控制台应用程序尝试执行 boost::python::exec_file() 时,它会挂起一秒钟然后崩溃。

它可以毫无问题地执行 boost::python::exec。

我尝试不使用 then boost 绑定并直接从 python api 执行,但同样的事情发生了,它挂了一会儿然后崩溃:

所以我想这是 python api 的问题,因为这是 boost.python 链接的内容?

我正在使用 Boost.Python 的共享版本,并链接到 Python 3.2.2 32 位库 (libpython32.a) 的预编译版本,我正在通过 Windows 7 上的 QtCreator 使用 MinGW 4.6 进行编译

这是我的 main.cpp:

这是我要执行的脚本文件(test.py):

我的 .pro 文件如下所示:

所有这些似乎工作正常,没有编译或链接错误,但我确实收到了一些警告:

编辑 现在这并不能解释或解决崩溃,但我可以绕过它,使用我自己的读取函数并传递 boost::python::exec 输出。那么我不必使用 exec_file 或 PyRun_SimpleFile

0 投票
1 回答
2307 浏览

python - 在嵌入式 Python 解释器中打印变量

我编写了一个嵌入 Python 的小型 C 程序。我正在使用 Py_Initialize() 和 Py_Finalize() 正确设置它,并且能够使用 PyRun_SimpleString 或 PyRun_SimpleFile 运行脚本。但是,我不知道在打印变量时如何模仿 Python 自己的解释器的行为。

具体来说:

对我来说很好:它打印出 (1, 2, 3)

然而:

什么也打印不出来。在 Python 自己的解释器中,这也会打印出 (1, 2, 3)。我怎样才能让我的代码做用户期望的事情并打印出价值?

提前致谢!

0 投票
1 回答
4463 浏览

c++ - Embedded Python 2.7.2 从用户定义的目录导入模块

我将 Python 嵌入到将具有已定义 API 的 C/C++ 应用程序中。

应用程序需要实例化脚本中定义的类,其结构大致如下:

我过去曾设法(用于概念验证)使用以下类型的代码完成此操作:

现在我在更多的生产环境中,这在 PyImport_Import 行失败了——我认为这可能是因为我试图在脚本名称前面加上一个目录,例如

现在,为了让您了解我的尝试,我尝试在所有这些调用之前修改系统路径以使其搜索此模块。基本上尝试以编程方式修改 sys.path :

这些行运行正常,但对使我的代码正常工作没有影响。显然,我的真实代码有一大堆错误检查,我已经排除了,所以不用担心!

所以我的问题是:如何将嵌入式解释器适当地引导到我的脚本,以便我可以实例化这些类?

0 投票
1 回答
1176 浏览

python - 为什么 PyRun_SimpleString 的“从导入”失败?

我正在开发一个简单的(?)嵌入式 Python 项目。我有一个自定义包,它已通过“setup.py install”安装到站点包中,例如:

在 C:\Python27\Lib\site-packages\:

只是做了一些简单的嵌入调用,我得到的一些行为与我在运行 Python 的 cmd 窗口中得到的行为不匹配。具体来说:

...而所有这些在 cmd 窗口中都可以正常工作(没有 ImportError,我可以在例如dir(mymodule)

我知道由此产生的解释器与Py_Initialize()您在 cmd 窗口中获得的解释器略有不同,特别是 sys.path ...在阅读了一些其他答案后,我尝试将 '' 作为第一个元素插入 sys .path: PyRun_SimpleString("import sys\nsys.path.insert(0,'')")在导入失败之前,但没有运气,仍然返回-1。还尝试将 sys.path 附加到“C:\Python27\Lib\site-packages\mypackage”,但导入“mymodule”(mymodule.py)仍然没有运气。

基于 SO 和其他网站上的其他示例,我在导入时尝试了一些变体,例如

也尝试过PyImport_ImportModuleEx,与 PyRun_SimpleString 一样,它适用于除“from mypackage import mymodule”之外的所有内容。

此外:此方案在 MacOS/Python 2.7 下运行良好。它只是在Windows下失败了。

Any ideas where this could be going off the rails?

UPDATE: some additional information: 'subpackage.py' imports an extension library (let's call it 'utilites.pyd'). I'm able to import other ".py" modules that do not import this.

0 投票
2 回答
1140 浏览

python - Python / C-Api:向模块添加类

我目前正在尝试将 python 解释器嵌入到我的应用程序中。因为我的应用程序使用 Poco API 进行日志记录,所以我也希望通过 python 中的日志模块访问它。对我来说,最简单的方法是提供一组静态函数作为扩展模块来记录消息,然后编写一个调用这些函数的 Handler 子类。

因为我不希望用户安装任何额外的 python 模块,并且我不需要在嵌入式 python 解释器之外重用我的代码,所以如果可以通过提供静态函数Py_InitModule()然后添加一个硬编码的处理程序,那就太好了创建模块的子类(硬编码意味着:在运行时添加,但实际上是一个始终在初始化时解释的 const 字符串)。

我的问题是我不知道如何解释普通的 python 类定义,例如:

以便将其添加到给定的模块中,然后可以访问,例如mymodule.Test

解决方案可以是纯 python 的,也可以使用 python c-api。

0 投票
1 回答
263 浏览

python - “重载”不适用于标准错误

上面的代码是从这里借用的:How to redirect stderr in Python? 通过 Python C API?

从 cpp exe 运行时,我收到一个消息框“HELLO FRED!” 接下来是一个空的消息框,我认为它是回车。到目前为止一切都很好,但是当引发异常时,我什么也得不到。也没有将任何内容写入文本文件。

但是......如果我从python脚本中取消注释“import stdcallbk”并从命令行运行它,我会得到这个:

和这个:

所以它确实有效,只是在从 cpp exe 运行时无效。

有人知道这里到底发生了什么吗?

干杯