问题标签 [python-c-api]

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 投票
1 回答
94 浏览

generator - 将生成器功能添加到 Python/C 类

我已经使用 Python/C API 在 C 中构建了一个类。我现在需要遍历 C blob 中的数据项。返回 PyList 是不可取的,因为长度 > 50K。有没有办法提供类似生成器的功能?

我的一个解决方案是将类包装在另一个纯 python 类中,并在该级别编写生成器函数。还有其他方法吗?

0 投票
2 回答
5849 浏览

c++ - 使用 PowerBuilder 10.0 错误从 DLL 调用外部函数

我使用 Visual C++ 2008 创建了一个 DLL,它创建了两个外部函数。使用 python,我创建了两个单独的可执行函数来运行它们。使用 PowerBuilder 调用该函数时,第一个可执行文件运行良好。第二个可执行文件导致运行时错误:error calling external function %s. 我使用一个.def文件,并且每个函数都有正确的序数。有什么建议吗?

C 中的函数声明如下(抱歉,它们很长):

在 powerbuilder 中,外部函数声明是:

start_grain_size 导致错误

0 投票
2 回答
8659 浏览

python - 将 Python 嵌入到 C 中 - 导入模块

根据文档,我在使用适用于 C 的嵌入式 Python 时遇到问题- 每当我尝试使用导入的模块时,我都会得到:

PythonIncl.exe 中 0x1e089e85 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000004。

错误发生在PyObject_GetAttrString()方法中,文档没有太大帮助。我也尝试过使用IBM示例中的教程,但总是遇到相同的访问冲突。

以下是我似乎无法开始工作的教程之一的示例代码,这里有什么问题?

C 代码(在一个主文件中):

Python 代码(在名为 reverse.py 的文件中,位于同一文件夹中):

我正在使用 MSVS2008、Python 2.7 运行 XP 机器

一点上下文:我正在尝试在一个相当大的 C 程序中嵌入一个使用 OpenOPC 的小型 python 脚本,并希望在两者之间传输数据。但是,我已经在基本示例的概念验证测试中失败了。

0 投票
2 回答
403 浏览

python - 为什么 Python 函数会被垃圾收集?

我有一个使用 Python 回调的 C++ 库。回调,即 PyObject*,存储在 UnaryFunction 类的对象中,构造函数 Py_INCREF 对其进行引用。析构函数 Py_XDECREFs 它。那就是问题所在。解释器在该 DECREF 上出现段错误。

我的解决方案是不 DECREF 它,但这似乎是错误的。INC/DEC 函数引用计数的正确方法是什么,更重要的是,为什么解释器在有其他实时引用时尝试 GC 函数体?

编辑:在 Linux 而不是段错误上,我得到一个断言失败,上面写着:

python: Objects/funcobject.c:442: func_dealloc: Assertion 'g->gc.gc_refs != (-2)' failed.

0 投票
1 回答
1906 浏览

c++ - 将 python + numpy 代码嵌入到 C++ dll 回调中

我是 python 嵌入的新手。我正在尝试将 python + numpy 代码嵌入到 C++ 回调函数中(在 dll 中)

我面临的问题如下。如果我有:

一切正常。

但如果我有:

这在第二次到达 _import_array() 时崩溃;(意味着它适用于第一个回调)

如果我只进行一次python和numpy初始化并在析构函数中完成(因此不是每次初始化/完成),离开回调时一切都会崩溃..

我猜这里的问题是numpy,但我不知道如何解决它

0 投票
1 回答
4590 浏览

python - Python C API 不加载模块

我正在尝试使用 C API 在 C 中加载一个包含数学和 numpy 导入的 python 模块。我可以加载并运行该模块,但是,如果我导入数学模块,它就不起作用。

我正在使用 Arch Linux、Python 2.7.2 和 gcc。

这里的代码:

函数.py

以及如何在不需要使用脚本的情况下将 Python 脚本嵌入到 C 中?

0 投票
1 回答
4118 浏览

python - Numpy C-Api 示例给出了 SegFault

我试图了解 Python C-Api 的工作原理,并且我想在 Python 和 C 扩展之间交换 numpy 数组。

所以,我开始了这个教程:http ://dsnra.jpl.nasa.gov/software/Python/numpydoc/numpy-13.html

尝试在那里做第一个例子,一个计算二维 numpy 数组轨迹的 C 模块,对我来说非常整洁,因为我也想在二维数组中进行基本操作。

该模块的名称是 trace,它是使用 setup.py 文件编译的:

该文件已编译,trace.so 在 IPython 中导入,但是当我尝试使用方法 trace() 时,我得到一个 Segmentation Fault,我不知道为什么。

我使用 Fedora 15、Python 2.7.1、gcc 4.3.0、Numpy 1.5.1 运行它

0 投票
1 回答
149 浏览

python - PyArray_BOOL 声明和使用 C 扩展中的 Numpy 布尔数组

我的代码中有一个 NumPy 布尔数组,我希望向其编写 C 扩展。当我尝试获取一个连续数组以便在我的 C 例程中使用时,我使用:

但是我得到了 PyArray_BOOL 没有声明的编译器错误。

为什么会这样?这种类型是未声明的吗?如果是这样,我如何将我的布尔数组引入C?

谢谢!

0 投票
4 回答
8109 浏览

python - 将 PyArrayObject 数据类型转换为 C 数组

我想在 C 扩展中使用我的 Numpy 数组。这种情况下的很多例子都使用了 PyArrayObject 的结构,

array->data , array->strides[0] , array->strides[1] , ...

指针以访问数据,如果我想以我更熟悉(或更整洁)的方式访问我的数组,索引如下

array[i][j]

我应该怎么做?我应该对 (bool *) array->data 进行类型转换并使用我创建的 C 数组吗?(我的元素是布尔值)

我现在的函数声明是(当然还没有完成)

谢谢!

0 投票
1 回答
1316 浏览

python - CApi 中的 PyArg_ParseTuple SegFaults

我正在编写代码,试图习惯 NumPy 数组的 C API。

这是一个精简版。我只想能够获得一个类型的对象PyArrayObject并将其返回。不幸的是,这也给出了 SegFault。

Linux,64 位,Python 2.7.1