问题标签 [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 - 包中的 Python C 扩展 - 不起作用?
我正在打包我的python C扩展,我在这里遇到了麻烦:
有了这个 setup.py
我可以毫无问题地构建,但安装后我无法导入我的模块,我只是得到一个 ImportError。
我确定这是微不足道的,所以我错过了什么?
提前致谢!
python - h5py 与另一个 HDF5 模块一起使用时导致死锁
我正在为使用 pthreads 和 HDF5 的 Python 编写 C++ 模块。我的模块在 H5F_ACC_EXCL 模式下创建 HDF5 文件,以便在文件已经存在时失败。在这种情况下,HDF5 会打印堆栈跟踪。该模块的 python C 接口函数在一个线程中执行,文件创建在另一个线程中进行。通常一切正常,但如果我使用我的模块在脚本中导入 h5py,系统就会陷入死锁。尝试创建文件的线程具有以下回溯:
[第 7 行通知我模块中的函数] 我发现导入 PyTables 不会导致此问题。任何有关解决此问题的帮助将不胜感激。
reference-counting - 使用 PyTuple_SetItem 时出现明显的内存泄漏
我正在 C++ Python 扩展中构建一组嵌套的元组。但是,我在管理引用计数方面遇到了一些问题。
重新创建此内存泄漏的最少代码:
PyTuple_SetItem(outer, index, inner)
现在,如果我用 a代替Py_CLEAR(inner)
,内存使用量不会随着时间的推移而增长。
关于外部元组窃取对内部元组的引用,我错了吗?是否有其他原因无法回收内存?
python - Python C API:使用 PyEval_EvalCode
我试图弄清楚如何从 C 中使用 Python 解释器,但我遇到了PyEval_EvalCode
. 基本上,我正在编写一个 C 函数,它接收任意 Python 代码字符串,编译它,执行它,然后打印出结果。
问题是当我打印出结果时,我总是得到None
,即使表达式显然没有计算为None
。
这是代码(为清楚起见,删除了错误检查和引用计数):
我尝试使用"5 + 5"
作为输入调用此函数,并显示None
. 我使用PyEval_EvalCode
不正确吗?
c++ - 将一段 C++ 代码包装成 Python
我有一段生成数据的 C++ 代码。我想将数据公开给 Python。但这并不像听起来那么微不足道...
假设这个 C++ 编译成二进制文件cppcode
。由于框架设置的复杂方式,我只能将代码运行为
在 cppcode 内部,它生成我想从 Python 访问的数据。我知道我是否可以以某种方式将程序重写为
然后我可以用 Boost Python 封装 CppClass,构建一个实例,使用参数运行,并访问生成中的数据。
但是现在我只能将代码运行为./cppcode {command line arguments}
我不能只./cppcode
从 Python 调用,因为在 ./cppcode 完成后,它的内存将被系统重新收集,我再也无法从 Python 中看到它了。有没有办法解决这个问题?
我能想到:(1)让./cppcode把数据转储到磁盘,让python读取。(2) 将数据转储到标准输出并通过管道传输到 python 脚本中。但无论哪种方式,我都必须在 Python 中进行一些可能很慢的字符串解析。有没有办法绕过它?
python - 使用 C 中的高级 Python 构造
是否有使用更高级别的 Python 构造的最佳实践,例如threading.Condition
, 以及collections.deque
用 C 编写的模块?尤其是:
- 避免方法和成员的字典查找成本
- 尽可能直接访问 C中的这些构造的一部分
- 何时在本地重新实现所需的功能,而不是从标准库的其他地方导入
python - 从 C 扩展访问 PIL 图像数据
从 C 扩展访问 PIL 图像的像素数据的速度最有效的方法是什么?我只需要对其进行只读访问,如果这有所作为的话。
python - Python C-API PyUnicode_FromString
我正在使用 Python C API,虽然我用谷歌搜索并发现了一些神秘的答案(这并不能解决我的问题),但我似乎无法克服这个错误。
使用gcc -shared [...] 'pkg-config --cflags --libs python3' -fPIC [...]
(而且,是的,pkg-config 行在反引号中)编译我的程序时,但它会产生以下错误消息:
有问题的代码行很简单: PyObject *value = PyUnicode_FromString("foo") 实际上取自Python3 文档。 该示例的内容可以很好地编译并在 Python 解释器中运行,而不会出现与gcc
.
非常感谢任何帮助!谢谢!
python - PyErr_Set* 两次
调用PyErr_Set*
覆盖异常是否安全?根据文档,如果出现错误,则使用提供给它的message 参数PySequence_Fast
引发 a 。引发错误后调用是否安全?TypeError
const char *
PyErr_SetObject
PySequence_Fast
例子: