问题标签 [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.
python - Go 和 Cython 的区别
今天我的一个好朋友问我最新的 Go 语言和Cython之间的主要区别是什么,Cython是 Python 的一组 C 扩展。我对 Python 知之甚少,谁能告诉我为什么 Go 比 Cython 更好/更差?
python - 在 Python 中包装 C 库:C、Cython 还是 ctypes?
我想从 Python 应用程序调用 C 库。我不想包装整个 API,只包装与我的案例相关的函数和数据类型。在我看来,我有三个选择:
- 在 C 中创建一个实际的扩展模块。可能有点矫枉过正,而且我还想避免学习扩展编写的开销。
- 使用Cython将 C 库中的相关部分公开给 Python。
- 在 Python 中完成所有工作,
ctypes
用于与外部库进行通信。
我不确定 2) 还是 3) 是更好的选择。3) 的优点是它ctypes
是标准库的一部分,并且生成的代码将是纯 Python ——尽管我不确定这种优势实际上有多大。
任何一种选择都有更多的优点/缺点吗?您推荐哪种方法?
编辑:感谢您的所有回答,它们为任何想要做类似事情的人提供了很好的资源。当然,仍然需要针对单个案例做出决定——没有一个“这是正确的事情”之类的答案。对于我自己的情况,我可能会使用 ctypes,但我也期待在其他项目中尝试 Cython。
由于没有单一的正确答案,因此接受一个有点武断。我选择了 FogleBird 的答案,因为它提供了对 ctypes 的一些很好的见解,而且它目前也是投票率最高的答案。但是,我建议阅读所有答案以获得良好的概述。
再次感谢。
python - 用 cython 扩展 numpy
我正在尝试包装一个具有很多这样的功能的头文件
测试.h
这样我就可以使用 numpy.
现在我有以下 cython 代码:
测试.pyx
但是,当我尝试编译它时,我得到了错误:
我怎样才能解决这个问题?
python - 用 Cython 包装 C++ 库
我是 Cython 的新手,我正在尝试使用 Cython 来包装 C/C++ 静态库。我做了一个简单的例子如下。
测试.h:
测试.cpp
然后我使用 g++ 编译和构建它。
所以现在我得到了一个名为libtest.a
.
测试.pyx:
安装程序.py:
我打电话给:
输出是:
我也尝试使用libraries=['test']
而不是libraries=['libtest']
. 它给了我同样的错误。
对此有任何线索吗?
python - 使用 Cython 访问 C 标头幻数/标志
我想用 Cython 访问的一些标准 C 库有很多标志。Cython 文档声明我必须复制我需要的标头部分。当涉及到函数定义时,这很好。它们通常在任何地方复制,包括文档。但是那些神奇的数字呢?
如果我想调用mmap
,我总是可以找到函数定义并将其粘贴到 .pxd 文件中:
但是调用它需要大量的标志,比如PROT_READ
,MAP_ANONYMOUS
等等。我对此至少有两个问题:
首先,寻找这些数字的确切定义位置是一件烦人的工作。事实上,我宁愿写一个 .c 文件并打印我需要的值。有没有更好的方法来查找给定标志的值,例如PROT_READ
?
其次,这些数字有多稳定?在提取了我需要的所有值并将它们硬编码到我的 Cython 源代码之后,在不同平台上编译的机会有多大,比如说PROT_READ
和PROT_EXEC
?
即使答案是没有好的或适当的方法来做到这一点,我也想听听。只要我知道我没有遗漏任何东西,我总是可以接受有些东西很麻烦。
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)?
python - 在 cdef 类中调用 cdef
他们有什么方法可以完成这项工作,而不牺牲 cdef 调用者中的 cdef 吗?(也不使用 cpdef)
python - Cython 可以编译成 EXE 吗?
我知道 Cythons 的目的是什么。它是用类似 Python 的语言编写可编译的 C 扩展,以便在您的代码中产生加速。我想知道(并且似乎无法使用我的 google-fu 找到)是 Cython 是否可以以某种方式编译成可执行格式,因为它似乎已经将 python 代码分解为 C。
我已经使用 Py2Exe,它只是一个打包程序,但我有兴趣使用它来编译成更难解包的东西(使用 Py2EXE 打包的任何东西基本上都可以使用我不想要的 7zip 提取)
看来如果这不可能,我的下一个选择就是编译我的所有代码并将其作为一个模块加载,然后使用 py2exe 将其打包,至少将我的大部分代码转换为编译形式,对吧?
python - 将 eval() 与 cython 一起使用时遇到问题
我试图加速一些代码,然后我尝试使用 cython 编译一个类和一个函数
哇!我还没有测量它,但它看起来至少快 10 倍。
两天前我第一次看cython,我印象非常深刻!
但是,我无法让 eval() 工作。
我将其编译为 module1.pyd 文件并使用 python 文件调用它:
这将返回:
NameError:名称“a”未定义。
感谢所有帮助。
python - 我需要加快功能。我应该使用 cython、ctypes 还是其他东西?
通过编写遗传编程类型的应用程序,我在学习 Python 中获得了很多乐趣。
在这个网站上,我从 Torsten Marek、Paul Hankin 和 Alex Martelli 那里得到了一些很好的建议。
该程序有4个主要功能:
- 生成(随机)一个表达式树。
- 评估树的适应度
- 杂交
- 变异
正如所有生成、杂交和变异一样,都称为“评估适应度”。它是最繁忙的功能,也是速度方面的主要瓶颈。
正如遗传算法的本质一样,它必须搜索一个巨大的解决方案空间,所以越快越好。我想加快这些功能中的每一个。我将从健身评估器开始。我的问题是最好的方法是什么。我一直在研究 cython、ctypes 和“链接和嵌入”。它们对我来说都是新的,而且现在已经超出了我的范围,但我期待学习其中的一个,并最终学习所有这些。
“适应度函数”需要将表达式树的值与目标表达式的值进行比较。所以它将由一个后缀评估器组成,它将按后缀顺序读取树。我有python中的所有代码。
我需要关于我现在应该学习和使用的建议:cython、ctypes 或链接和嵌入。
谢谢你。