python-c-extension

    -1热度

    1回答

    我想为Python编写一个C扩展,如下所示,此代码的目的是计算欧几里得从浮点的2个列表中进行选择。 C代码: #include <python2.7/Python.h> #include <math.h> static PyObject* cutil_euclidean_dist(PyObject* self, PyObject* args) { PyObject *seq_a,

    6热度

    2回答

    我试图编译从文档https://docs.python.org/2.7/extending/embedding.html的例子,我的代码看起来酷似5.1下一个: #include <Python.h> int main(int argc, char *argv[]) { Py_SetProgramName(argv[0]); Py_Initialize();

    2热度

    1回答

    我想要一个Python脚本为正在运行脚本的任何版本的Python解释器构建一个Python C扩展模块。为此,我想要动态获取相关的C编译器标记 - 完成此操作的一种方法是获取 CLI工具的输出,例如,像这样: subprocess.check_output(["python-config", "--includes"]) 不幸的是,在其上安装了Python的几个版本的系统,这种方法可能无法找到

    2热度

    1回答

    Python/C API有许多相关的函数,这些函数执行类似的操作,其中一个通常用于一般用途,另一个则以某种方式更有效或便于特定情况。 例如,PyDict_SetItem和PyDict_SetItemString是相同的,但后者专门用于C字符串作为关键字。对于PyList_SetItem和PyList_SET_ITEM,第二个没有错误检查,也不会递减现有项目(explained here)。 但是,

    6热度

    1回答

    基本上我想要用C编写 所以Python程序调用函数(据我所知),我的选择是: ctypes的/ CFFI 创建一个DLL/SO/DyLib含有C函数和使用ctypes的或CFFI访问它们。显然CFFI是更快的方法,唯一的缺点是必须在python中声明所有的函数签名。 优点: 不要做任何适应在我的C函数。所有的类型转换都是用Python完成的。 缺点: 性能? Python的二进制模块 C编写一个P

    1热度

    1回答

    我正在学习/尝试在C中的Python扩展。我试图包装一个C库,以便它可以以更Pythonic的方式使用。例如: import mylib widget = mylib.widget.Widget(name="Hello!") widget.show() mylib.utils.say_hello() 在C代码,传递给PyModule_Create模块的名称分别为 “mylib中”,

    0热度

    1回答

    我在C中编写了一个Python 3扩展模块,但似乎无法让Python导入它。 有什么办法让Python打印出它试图加载的共享库(.so),以及它为什么会失败? 可悲的是,我读的所有文档都没有真正帮助,因为没有一个简明的描述本地导入过程。 我想的是: ctypes.CDLL("libmydep1.so") ctypes.CDLL("libmydep2.so") try: import

    7热度

    2回答

    我正在Cython中编写一个Python 2.7扩展模块。 如何创建一个Python对象来实现包装C库给我的一段内存的新式缓冲接口?内存块只是一串字节,而不是结构或多维数组。我得到了一个const void *指针和一个长度,以及指针保持有效时间的一些细节。 我无法复制内存 - 这会导致我的应用程序性能下降。 对于旧式缓冲区对象,我可以简单地使用PyBuffer_FromMemory(),但我似乎

    6热度

    1回答

    我正在手动修改NumPy数组的形状和大小,这可能(或可能不)使邻接标志无效。 我必须再手动检查进展是否与您所期望的形状和NPY_C_CONTIGUOUS(或NPY_F_CONTIGUOUS)值是多少? 是否有一个API函数会为我做这些,并根据需要自动清除或启用标志?

    0热度

    1回答

    #include <Python.h> int isCodeValid() { char *base = calloc(512, 1); // free(base); // base = calloc(512,1); base = realloc(512, 1); free(base); return 1; } static PyMethodD