11得票3回答
如何编写一个C函数,可以接受整型或浮点型参数?

我想在C语言中创建一个函数,扩展Python,可以接受float或int类型的输入。因此,基本上,我希望f(5)和f(5.5)都可以作为合法输入。 我认为不能使用if(!PyArg_ParseTuple(args,"i",$value)),因为它只能接受整数或者浮点数其中之一。 如何让我的...

11得票2回答
Python-C++扩展能否获取C++对象并调用其成员函数?

我正在编写一款Python/C++应用程序,该程序将从Python中调用C++扩展库的方法。假设我的C++代码有一个类:class A { private: int _i; public: A(int i){_i=i;} int ...

10得票1回答
如何在Python扩展中处理uint8_t?

我希望在我的C模块中作为函数参数传递uint8_t数组。 我找不到直接解析此数组的方法,因此我将其解析为PyObject_t,然后将其作为PyTuple_t对象进行迭代。 这样,我需要将该元组的每个PyObject_t元素强制转换为uint8_t。 由于没有PyInt_FromUINT...

9得票1回答
如何在C++中高效构建Python字典

出于性能方面的考虑,我想将我的Python程序的部分内容移植到C++中,并尝试为我的程序编写一个简单的扩展。 C ++ 部分将构建一个字典,然后需要将其传递给Python程序。 我发现的一种方法似乎是在C ++中构建类似于字典的对象,例如 boost :: unordered_map,然后使...

9得票1回答
当类实现PEP 3118时,Python 2.7中PyBufferProcs的定义

我正在扩展我们库中的类(支持Python 2.7),以支持已经被回溯到2.7的PEP 3118。根据文档,我需要将tp_as_buffer字段初始化为指向PyBufferProcs的指针。然而,从2.7的文档中,此结构的描述仅包含旧缓冲区协议的条目。从源代码中,我收集到PyBufferProc...

9得票3回答
如何在Mac OSX上将python.h添加到我的Python虚拟环境中?

我正在为Python应用程序编写C扩展,并需要测试特定于Python的C代码。为此,我需要将Python.h导入到我的C文件中,但是我一直无法做到这一点。大多数教程建议类似于sudo apt-get python-dev,但是我的系统没有apt-get,即使有,我认为在我的虚拟环境中拥有dev...

9得票2回答
使用MacOS 10.15(Catalina)创建 Python C 扩展,保证向后兼容(MacOS 10.9+)。

我如何在MacOS上创建一个Python C扩展轮子,使其向后兼容(MacOS 10.9+),并且能在MacOS 10.15上运行? 目前我已有以下内容: export MACOSX_DEPLOYMENT_TARGET=10.9 python -m pip wheel . -w wheel...

8得票1回答
Python中无法导入.so模块:动态模块未定义init函数。

我正在尝试为一个C函数编写Python包装器。在编写所有代码,编译通过后,Python无法导入模块。我正在遵循这里给出的示例。我在此处复制了该示例,并纠正了一些拼写错误。有一个名为 myModule.c 的文件: #include <Python.h> /* * Functi...

7得票2回答
如何在调用setup.py install时向build_ext传递--debug参数?

当我执行python setup.py install或python setup.py develop命令时,它会将build_ext命令作为其中一个步骤来执行。如何将--debug选项传递给它,就像调用python setup.py build_ext --debug一样? 更新 这是一...

7得票2回答
数据损坏:错误在哪里?

最后编辑:我已经弄清楚了问题所在(请参见下面的我的答案),但似乎无法将问题标记为已解决。如果有人能回答我在下面答案中提出的问题,即这是否是Cython的一个bug还是Cython的预期行为,那么我将标记该答案为已接受,因为这将是从中获得最有用的教训,我个人认为。 首先,我不得不说我已经试...