问题标签 [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 投票
6 回答
6204 浏览

python - Go 和 Cython 的区别

今天我的一个好朋友问我最新的 Go 语言和Cython之间的主要区别是什么,Cython是 Python 的一组 C 扩展。我对 Python 知之甚少,谁能告诉我为什么 Go 比 Cython 更好/更差?

0 投票
12 回答
82578 浏览

python - 在 Python 中包装 C 库:C、Cython 还是 ctypes?

我想从 Python 应用程序调用 C 库。我不想包装整个 API,只包装与我的案例相关的函数和数据类型。在我看来,我有三个选择:

  1. 在 C 中创建一个实际的扩展模块。可能有点矫枉过正,而且我还想避免学习扩展编写的开销。
  2. 使用Cython将 C 库中的相关部分公开给 Python。
  3. 在 Python 中完成所有工作,ctypes用于与外部库进行通信。

我不确定 2) 还是 3) 是更好的选择。3) 的优点是它ctypes是标准库的一部分,并且生成的代码将是纯 Python ——尽管我不确定这种优势实际上有多大。

任何一种选择都有更多的优点/缺点吗?您推荐哪种方法?


编辑:感谢您的所有回答,它们为任何想要做类似事情的人提供了很好的资源。当然,仍然需要针对单个案例做出决定——没有一个“这是正确的事情”之类的答案。对于我自己的情况,我可能会使用 ctypes,但我也期待在其他项目中尝试 Cython。

由于没有单一的正确答案,因此接受一个有点武断。我选择了 FogleBird 的答案,因为它提供了对 ctypes 的一些很好的见解,而且它目前也是投票率最高的答案。但是,我建议阅读所有答案以获得良好的概述。

再次感谢。

0 投票
2 回答
1343 浏览

python - 用 cython 扩展 numpy

我正在尝试包装一个具有很多这样的功能的头文件

测试.h

这样我就可以使用 numpy.

现在我有以下 cython 代码:

测试.pyx

但是,当我尝试编译它时,我得到了错误:

我怎样才能解决这个问题?

0 投票
3 回答
16973 浏览

python - 用 Cython 包装 C++ 库

我是 Cython 的新手,我正在尝试使用 Cython 来包装 C/C++ 静态库。我做了一个简单的例子如下。

测试.h:

测试.cpp

然后我使用 g++ 编译和构建它。

所以现在我得到了一个名为libtest.a.

测试.pyx:

安装程序.py:

我打电话给:

输出是:

我也尝试使用libraries=['test']而不是libraries=['libtest']. 它给了我同样的错误。

对此有任何线索吗?

0 投票
3 回答
921 浏览

python - 使用 Cython 访问 C 标头幻数/标志

我想用 Cython 访问的一些标准 C 库有很多标志。Cython 文档声明我必须复制我需要的标头部分。当涉及到函数定义时,这很好。它们通常在任何地方复制,包括文档。但是那些神奇的数字呢?

如果我想调用mmap,我总是可以找到函数定义并将其粘贴到 .pxd 文件中:

但是调用它需要大量的标志,比如PROT_READ,MAP_ANONYMOUS等等。我对此至少有两个问题:

首先,寻找这些数字的确切定义位置是一件烦人的工作。事实上,我宁愿写一个 .c 文件并打印我需要的值。有没有更好的方法来查找给定标志的值,例如PROT_READ

其次,这些数字有多稳定?在提取了我需要的所有值并将它们硬编码到我的 Cython 源代码之后,在不同平台上编译的机会有多大,比如说PROT_READPROT_EXEC

即使答案是没有好的或适当的方法来做到这一点,我也想听听。只要我知道我没有遗漏任何东西,我总是可以接受有些东西很麻烦。

0 投票
3 回答
21682 浏览

python - 让 distutils 在正确的位置查找 numpy 头文件

在我的安装中,numpy'sarrayobject.h位于…/site-packages/numpy/core/include/numpy/arrayobject.h. 我写了一个使用 numpy 的简单 Cython 脚本:

我还有以下 distutils setup.py(从Cython 用户指南复制):

当我尝试使用 构建时python setup.py build_ext --inplace,Cython 尝试执行以下操作:

可以预见的是,这找不到arrayobject.h. 如何让 distutils 使用 numpy 包含文件的正确位置(不让用户定义 $CFLAGS)?

0 投票
1 回答
707 浏览

python - 在 cdef 类中调用 cdef

他们有什么方法可以完成这项工作,而不牺牲 cdef 调用者中的 cdef 吗?(也不使用 cpdef)

0 投票
4 回答
36704 浏览

python - Cython 可以编译成 EXE 吗?

我知道 Cythons 的目的是什么。它是用类似 Python 的语言编写可编译的 C 扩展,以便在您的代码中产生加速。我想知道(并且似乎无法使用我的 google-fu 找到)是 Cython 是否可以以某种方式编译成可执行格式,因为它似乎已经将 python 代码分解为 C。

我已经使用 Py2Exe,它只是一个打包程序,但我有兴趣使用它来编译成更难解包的东西(使用 Py2EXE 打包的任何东西基本上都可以使用我不想要的 7zip 提取)

看来如果这不可能,我的下一个选择就是编译我的所有代码并将其作为一个模块加载,然后使用 py2exe 将其打包,至少将我的大部分代码转换为编译形式,对吧?

0 投票
2 回答
1080 浏览

python - 将 eval() 与 cython 一起使用时遇到问题

我试图加速一些代码,然后我尝试使用 cython 编译一个类和一个函数

哇!我还没有测量它,但它看起来至少快 10 倍。

两天前我第一次看cython,我印象非常深刻!

但是,我无法让 eval() 工作。

我将其编译为 module1.pyd 文件并使用 python 文件调用它:

这将返回:

NameError:名称“a”未定义。

感谢所有帮助。

0 投票
4 回答
2701 浏览

python - 我需要加快功能。我应该使用 cython、ctypes 还是其他东西?

通过编写遗传编程类型的应用程序,我在学习 Python 中获得了很多乐趣。

在这个网站上,我从 Torsten Marek、Paul Hankin 和 Alex Martelli 那里得到了一些很好的建议。

该程序有4个主要功能:

  • 生成(随机)一个表达式树。
  • 评估树的适应度
  • 杂交
  • 变异

正如所有生成、杂交和变异一样,都称为“评估适应度”。它是最繁忙的功能,也是速度方面的主要瓶颈。

正如遗传算法的本质一样,它必须搜索一个巨大的解决方案空间,所以越快越好。我想加快这些功能中的每一个。我将从健身评估器开始。我的问题是最好的方法是什么。我一直在研究 cython、ctypes 和“链接和嵌入”。它们对我来说都是新的,而且现在已经超出了我的范围,但我期待学习其中的一个,并最终学习所有这些。

“适应度函数”需要将表达式树的值与目标表达式的值进行比较。所以它将由一个后缀评估器组成,它将按后缀顺序读取树。我有python中的所有代码。

我需要关于我现在应该学习和使用的建议:cython、ctypes 或链接和嵌入。

谢谢你。