问题标签 [cython]

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 回答
7659 浏览

c++ - 在 cython 中处理默认参数

我正在使用 cython 包装一些 c++ 代码,但我不确定使用默认值处理参数的最佳方法是什么。

在我的 c++ 代码中,我有参数具有默认值的函数。我想以这样一种方式包装它们,以便在未给出参数的情况下使用这些默认值。有没有办法做到这一点?

在这一点上,我可以看到提供选项参数的唯一方法是将它们定义为 python 代码的一部分(在下面的pycode.pyxdef func中),但是我已经多次定义了我不想要的默认值.

cppcode.h


pycode_c.pxd


pycode.pyx

0 投票
5 回答
75070 浏览

python - 使用 Cython 编译主要 Python 程序

我有一个 Python2.6 程序,可以加载使用 Cython 编译为 .so 文件的 Python 模块。我使用 Cython 将 .py 模块编译为 .so 文件,一切正常。

这是我在 Cython 中使用的 setup.py 文件:

所以我知道我可以使用 Cython 编译 Python 模块(我猜 Cython 从我的 Python 文件创建“C”文件然后编译它们),但是我可以将我的主要 Python 程序编译成我可以在 Linux 平台上执行的东西吗?如果是这样,将不胜感激 Cython 命令行示例。谢谢。

0 投票
3 回答
2132 浏览

python - 在 Mac OS 10.6 (python 2.6) 上安装/构建 pymssql

按照自述文件和此处http://code.google.com/p/pymssql/wiki/Compilation中的说明,我已经安装了 Cython (v0.14.1)、FreeTDS (v0.82 using MacPorts),并且我已经有了 XCode与 gcc 一起安装。

我在以下过程中遇到了构建错误python setup.py install:很多undeclared name not builtin:类似strlen, PyMem_Malloc, PyMem_Free,PY_LONG_LONG以及一些___ is deprecated, use 'cpython'

谷歌发现我这个线程http://groups.google.com/group/cython-users/browse_thread/thread/468bb80480ede699/dc8267a4274c2413有人解决了第一个错误(from libc.string cimport strlen, strcpyfrom stdlib cimport strlen, strcpy.)

现在我得到:_mssql.pyx:650:34: Cannot convert Python object to 'const_char *'

以下是这些问题来自http://code.google.com/p/pymssql/source/browse/tags/1.9.908/_mssql.pyx的文件

我的问题:

如果我没有正确准备我的系统,pymssql我做错了什么?

或者

如果_mssql.pyx文件使用不推荐使用的导入,我该如何修复它们?

0 投票
1 回答
2665 浏览

python - 在不同包中编译具有依赖项的 pyx 文件

我在编译不同包中的 cdef-ed 类型时遇到问题,我在 cython 文档中找不到解释。

我的 python src 树的根目录中有这个 setup.py:

FragIdx 是一个 cdef-ed 类型,在 flink/pytk/defs/FragIdx.pyx 中定义:

而STK_idx是FragIdx的扩展,定义在flink/pytk/fragments/STK_idx.pyx中:

当我尝试使用文章开头列出的 setup.py 进行编译时,FragIdx 编译正常,但是当涉及到 STK_idx 时,我收到以下错误消息:

请注意,我的源代码树的根目录在 $PYTHONPATH 中列出。

如果有人能对此有所了解,我将不胜感激,非常感谢!

丹尼尔

0 投票
2 回答
5240 浏览

c++ - Cython - 实现回调

我一直在与 Cython 合作,试图与用 c++ 编写的库进行交互。到目前为止,一切进展顺利,我可以有效地使用库中的 MOST 函数。我唯一的问题在于实现回调。该库有 4 个函数定义,看起来有点像这样:

所以为了实现它们,我想我会用 cython 做这样的事情:

但是,它实际上可以正确编译,但是,我一生都无法思考如何以回调可以工作的方式实际实现它。我首先尝试创建一个只调用它的函数,类似于你为任何其他函数执行它的方式,想出了这个:

但这给了我(可预测的)错误:

“无法将 Python 对象转换为 'Function1'”

所以,是的,这就是我所在的地方。如果有人有任何在 Cython 中设置回调的经验,我将非常感谢您提供任何帮助。谢谢。

编辑:根据您的建议,我使用 cdef 创建了一个中间函数,如下所示:

这似乎让我……更近了?现在至少得到一个不同的错误:

现在,据我所知,这些类型是相同的,所以我不知道发生了什么。

Edit2:通过声明一个新的 typedef 来解决这个问题:

并将其用作调用的参数,但显然这实际上并没有变得更近,只是带我绕道而行,因为在尝试调用该函数时,我得到相同的“无法将Python对象转换为'Function1' “错误又来了。

所以,我几乎回到了我开始的地方。我现在唯一能做的就是明确地将 python 对象作为 ac 函数传入,但是,老实说,我不知道该怎么做。

编辑第三个:好吧,在剖析你的答案之后,我终于明白了,它有效,所以万岁等等。我最终做的是创建一个这样的函数:

所以现在唯一的问题是它无法将 const_ushort *data 转换为 python 对象,但这完全是另一个问题,所以我想这个问题已经解决了,非常感谢。

0 投票
2 回答
4495 浏览

python - Cython - 将指向数组的指针转换为 Python 对象

好吧,我已经快要完成这个了,我可以尝尝。在过去的几周左右,我一直在尝试创建一个 Python 扩展来与通过 Cython 用 C++ 编写的库进行交互。在这里的人和几个朋友的帮助下,我已经成功地完成了 98% 的工作。唯一剩下的就是:我一生都无法弄清楚如何将指向无符号短裤数组的指针转换为 python 对象(最好是列表)。

一点背景知识,我正在尝试与设置回调函数的库的一部分进行交互,我已经成功地做到了这一点:

问题出现在函数“回调”中,我得到错误:“无法将 'const_ushort *' 转换为 Python 对象”。我对此的第一次尝试是创建一个新的 python 列表,并循环将数组的每个元素放入 python 列表中,如下所示:

可悲的是,我使用编译的 cython 代码试图将类型定义为“const const unsigned short”,这显然是一个问题。

然后我尝试了这个:

这给了我“C 数组迭代需要已知的结束索引”。请注意,我对 C/C++ 知之甚少,因此其中大部分内容对我来说没有多大意义。

所以,无论如何,有没有任何有效的方法可以将这样的指针转换为 python 对象(最好比遍历数组更快,因为它通常大约有 57344 个项目,这对时间很敏感)

编辑:再澄清一点,正如我所提到的,我正在使用回调,并且调用它的库中的 C++ 函数发送一个指向“const uint_16”数组的指针,这就是我以这种方式定义 const_ushort 的原因,因为否则类型不统一。我无法以任何方式修改库。

Edit2:看起来我明白了。我最终要做的是将数组显式转换为无符号短裤数组,而不是 const 无符号短裤数组,以便我可以用非常数对它们进行索引。为了实现这一点,我创建了另一个像这样的 C++ 函数(别人为我写的,我几乎不知道 C++):

这使我可以在我的类中创建“ getindex ”函数并根据该函数返回正确的值。所以是的,Python 似乎正确地读取了数组等等,所以这个案例似乎已经结束。非常感谢。

0 投票
1 回答
272 浏览

python - Cython 接口与其他扩展

是否可以同时使用 Cython 和纯 python 扩展?假设我想要一个 C 函数的包装器,返回 GdkPixbuf 指针。最终目标是让该函数在 python 中可用,返回 gtk.gdk.Pixbuf 对象。

0 投票
2 回答
1393 浏览

python - cython setup.py 给出 .o 而不是 .dll

我是 cython 的新手,如果我在这里遗漏了一些明显的东西,请原谅我。我正在尝试构建 c 扩展以在 python 中使用以增强性能。我有具有一堆功能的 fc.py 模块,并尝试使用 dsutils 通过 cython 生成 .dll 并在 win64 上运行:

c:\python26\python c:\cythontest\setup.py build_ext --inplace

我在 C:\Python26\Lib\distutils 中有 dsutils.cfg。根据需要, disutils.cfg 具有以下配置设置:

我的 startup.py 看起来像这样:

这是命令行输出的样子:

我有用于目标/主机 amdwin64 类型构建的最新版本 mingw。我有最新版本的 cython for python26 for win64。Cython 确实给了我一个没有错误的 fc.c,只有一些类型转换的警告,一旦我做对了,我会处理的。此外,它生成 fc.def 和 fc.o 文件,而不是提供 .dll。我没有错误。我在线程上发现它会根据需要自动创建 .so 或 .dll,但这种情况没有发生。

0 投票
1 回答
2430 浏览

c++ - 无法转换'向量' 到 Python 对象

我正在尝试用签名包装一个 c++ 函数

使用赛通。我有一个包含该函数的文件 sieve.h,一个静态库 sieve.a,我的 setup.py 如下:

在我的 sieve.pyx 中,我正在尝试:

但我收到此“无法将 'vector' 转换为 Python 对象”错误。我错过了什么吗?

解决方案:我必须从我的 OES 函数返回一个 python 对象:

0 投票
3 回答
2278 浏览

python - 使用来自其他 Cython 代码的自定义 Cython 代码

我目前正在尝试优化我的 Python 程序并开始使用 Cython 以减少函数调用开销,也许稍后会包含优化的 C 库函数。

所以我遇到了第一个问题:

我在我的代码中使用组合来创建一个更大的类。到目前为止,我已经将我的一个 Python 类转换为 Cython(这已经够难了)。这是代码:

从我组合的 Python/Cython 类中,我调用了 class-method calculate,因此在我的组合类中,我有以下(简化的)代码:

我发现这cpdef使得方法/函数可以从 Python 和 Cython 调用,这很好并且有效,只要我不尝试self.bendingForces预先定义类型 - 根据文档(Early Binding For Speed),这是必要的为了消除函数调用开销。我尝试了以下方法,但不起作用:

membraneClass.pyx在尝试使用 Cython构建时,我得到了这个错误:

请注意,声明位于两个单独的文件中,这使得这更加困难。

那么我该怎么做呢?如果有人能给我指点,我将非常感激,因为除了上面给出的链接之外,我找不到任何关于此的信息。

谢谢和最好的问候!