问题标签 [python-c-extension]
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 - 有什么理由在 PyMem_Malloc 上使用 malloc 吗?
我正在阅读Python C extensions 中的内存管理文档,据我所知,似乎没有太多理由使用malloc
而不是PyMem_Malloc
. 假设我想分配一个不会暴露给 Python 源代码并将存储在将被垃圾收集的对象中的数组。有什么理由使用malloc
吗?
python - 如何在 Cython 中创建一个固定长度、可变的 Python 对象数组?
我需要有一组 python 对象用于创建 trie 数据结构。我需要一个结构,它像元组一样是固定长度,像列表一样是可变的。我不想使用列表,因为我希望能够确保列表的大小完全正确(如果它开始分配额外的元素,那么随着 trie 变大,内存开销可能会很快增加)。有没有办法做到这一点?我尝试创建一个对象数组:
...但这给出了一个错误:
做我想做的事情的最佳方法是什么?
python - 释放 PyTuple 对象
PyTuple
使用 Python C-API释放对象的正确方法是什么?
我知道元组在引用计数语义方面有些特殊,因为PyTuple_SetItem
“窃取”了对插入元素的引用。我也知道减少元组对象的引用会减少元组中所有元素的引用计数。
考虑到这一点,我认为应该安全地说:
但是当我减少元组引用计数时,最后一行会导致分段错误。我不明白为什么会这样。就在调用Py_DECREF
引用计数之前1
,那么这里的问题是什么?
python - 无法导入python扩展
我正在尝试学习 python 扩展,并创建了简单的noddy 示例c 文件和 setup.py。
python.exe setup.py build
给我:
然后我运行python.exe setup.py install
,这给了我:
但是,在空闲时,
那么,我做错了什么?诚然,我非常困惑。
python - 编写 Python C 扩展:如何正确加载 PyListObject?
在尝试读取一个填充了浮点数并填充real channels[7]
它们的值的 Python 列表时(我使用的是 F2C,所以 real 只是浮点的 typedef),我能够从中检索到的只是零值。你能指出下面代码中的错误吗?
python - Distutils 找不到 Python.h
我有一个带有扩展部分的 distutils 设置脚本,它看起来像这样:
setup.py build
在我的 Mac 上运行正常。当我移动到 Debian 机器时,它失败了:
我已经安装python2.6
并python2.6-dev
安装了,文件位于/usr/include/Python2.6
.
它为问题文件执行的命令:
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.6 -c my_module.c -o -build/XYZ/my_module.o
所以它传递了头文件的位置。
Mac 与 Linux 环境之间唯一明显的区别是 gcc-4.2 与 gcc-4.4 以及 Python 2.7 与 Python 2.6
想法?
编辑:
在有问题的 C 文件中:
python - 从 C 将对象返回给 Python
我已经阅读了 Python C-API 的文档,甚至还编写了一些扩展模块。但是,当涉及从 C 函数返回 Python 对象时,我仍然不清楚确切的语义。
Python 文档中的有限示例通常显示一个 C 函数,该函数返回Py_BuildValue
. 现在,Py_BuildValue
返回一个New Reference
, 并将这个引用的所有权转移给解释器。那么,我可以由此推断,返回给 Python 的任何对象都必须是一个新的引用,并且从 C 函数返回一个对象与将对象的所有权转移给解释器是一样的,这是一个通用规则吗?
如果是这样,那么返回一个已经被某物拥有的对象的情况呢?例如,假设您编写了一个接受 a PyObject*
which is a的 C 函数tuple
,然后调用PyTuple_GetItem
它并返回结果。 PyTuple_GetItem
返回一个借用的引用- 意味着该项目仍然由元组“拥有”。那么,在将结果返回给解释器之前,返回类似结果的 C 函数PyTuple_GetItem
是否必须得到结果?INCREF
例如:
python - 二进制上传后,easy_install 因错误“找不到安装脚本”而失败?
使用 上传我的 Python C 扩展的二进制分发后python setup.py bdist upload
,easy_install [my-package-name]
出现“错误:在 /tmp/easy_install/package-name-etc-etc 中找不到安装脚本”失败。
我究竟做错了什么?
python - Python C 扩展中的文档字符串?
在创建 Python 的 C 扩展时,是否能够以某种方式编写作为文档字符串公开给扩展用户的注释?
python - python中实例变量和属性之间的区别?
因此,用于编写扩展的 python 文档是这样说的:
“我们希望将我们的实例变量作为属性公开。有很多方法可以做到这一点。最简单的方法是定义成员定义:
并将定义放在 tp_members 槽中:
但是,我们已经将实例变量放入了 Noddy 结构体中:
所以我的问题是为什么我们把它们放在这两个地方。我的印象是,这是因为我们希望类型和实例都拥有它们,以便在实例更新后保留类型值。但是如果是这样的话,如果我们改变类属性,实例值是如何更新的呢?像这样: