Questions tagged «cython»

12
在Python中包装C库:C,Cython或ctypes?
我想从Python应用程序调用C库。我不想包装整个API,只包装与我的情况相关的函数和数据类型。如我所见,我有三个选择: 在C中创建一个实际的扩展模块。可能有点过头了,我还想避免学习扩展编写的开销。 使用Cython将C库的相关部分公开给Python。 使用Python ctypes与外部库进行通信,从而完成整个工作。 我不确定2)还是3)是更好的选择。3)的优点是它ctypes是标准库的一部分,并且生成的代码将是纯Python –尽管我不确定该优点实际上有多大。 两种选择都有其他优点/缺点吗?您推荐哪种方法? 编辑:感谢您的所有答复,它们为希望做类似事情的任何人提供了很好的资源。当然,仍需针对单个案例做出决定-没有人会回答“这是对的”。就我自己而言,我可能会使用ctypes,但我也期待在其他项目中试用Cython。 由于没有一个单一的真实答案,因此接受一个答案有点武断。我选择了FogleBird的答案,因为它提供了对ctypes的一些很好的了解,并且它也是当前投票最高的答案。但是,我建议您阅读所有答案以获得一个很好的概述。 再次感谢。
284 python  c  ctypes  cython 

6
Cython:“严重错误:numpy / arrayobject.h:没有此类文件或目录”
我试图加快答案在这里使用用Cython。我尝试编译代码(在完成此处cygwinccompiler.py介绍的hack 之后),但出现错误。谁能告诉我我的代码是否有问题,或者Cython有点神秘?fatal error: numpy/arrayobject.h: No such file or directory...compilation terminated 下面是我的代码。 import numpy as np import scipy as sp cimport numpy as np cimport cython cdef inline np.ndarray[np.int, ndim=1] fbincount(np.ndarray[np.int_t, ndim=1] x): cdef int m = np.amax(x)+1 cdef int n = x.size cdef unsigned int i cdef np.ndarray[np.int_t, ndim=1] c …

10
如何构造包含Cython代码的Python包
我想制作一个包含一些Cython代码的Python包。我的Cython代码运行良好。但是,现在我想知道如何最好地打包它。 对于大多数只想安装软件包的人,我想包括.cCython创建的文件,并安排对其setup.py进行编译以生成模块。然后,用户不需要安装Cython即可安装软件包。 但是对于那些可能想要修改程序包的人,我也想提供Cython .pyx文件,并以某种方式还允许setup.py使用Cython构建它们(因此这些用户将需要安装Cython)。 我应该如何构造软件包中的文件以适应这两种情况? 在用Cython文档提供了一些指导。但这并没有说明如何制作一个setup.py处理Cython情况的单例。
122 python  packaging  cython 

4
使用cython和mingw进行编译会产生gcc:错误:无法识别的命令行选项'-mno-cygwin'
我正在尝试使用mingw(64位)在win 7 64位中使用cython编译python扩展。 我正在使用Python 2.6(Active Python 2.6.6)和足够的distutils.cfg文件(将mingw设置为编译器) 执行时 > C:\Python26\programas\Cython>python setup.py build_ext --inplace 我收到一条错误消息,说gcc没有-mno-cygwin选项: > C:\Python26\programas\Cython>python setup.py build_ext --inplace running build_ext skipping 'hello2.c' Cython extension (up-to-date) building 'hello2' extension C:\mingw\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\Python26\include -IC:\Python26\PC -c hello2.c -o build\temp.win-amd64-2.6\Release\hello2.o gcc: error: unrecognized command line option '-mno-cygwin' error: command 'gcc' …

4
使用Cython编译主要的Python程序
我有一个Python2.6程序,可以使用Cython加载编译为.so文件的Python模块。我使用Cython将.py模块编译为.so文件,并且一切正常。 这是我与Cython一起使用的setup.py文件: from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext ext_modules = [ Extension("ldap", ["ldap.pyx"]), Extension("checker", ["checker.pyx"]), Extension("finder", ["finder.pyx"]), Extension("utils", ["utils.pyx"]), ] setup( name = 'bchecker', cmdclass = {'build_ext': build_ext}, ext_modules = ext_modules ) 因此,我知道我可以使用Cython编译Python模块(我想Cython会从我的Python文件创建“ C”文件,然后对其进行编译),但是我可以将我的主Python程序编译为可以在Linux平台上执行的程序吗?如果是这样,将不胜感激Cython命令行示例。谢谢。
81 python  cython 

2
建议为类型化的内存视图分配内存的方法是什么?
有关类型化内存视图的Cython文档列出了分配给类型化内存视图的三种方式: 从原始的C指针, 从一个 np.ndarray和 从cython.view.array。 假设我没有从外部将数据传递到cython函数中,而是想分配内存并将其返回为np.ndarray,那么我选择了哪些选项?还假设该缓冲区的大小不是编译时常量,即我无法在堆栈上分配,但需要malloc为选项1。 因此,这三个选项看起来像这样: from libc.stdlib cimport malloc, free cimport numpy as np from cython cimport view np.import_array() def memview_malloc(int N): cdef int * m = <int *>malloc(N * sizeof(int)) cdef int[::1] b = <int[:N]>m free(<void *>m) def memview_ndarray(int N): cdef int[::1] b = np.empty(N, dtype=np.int32) def …

1
使用LAPACK分发基于Cython的扩展
我正在编写一个包含Cython扩展和用法LAPACK(和BLAS)的Python模块。我打开使用两种clapack或lapacke,或某种f2c或f2py解决方案,如果必要的。重要的是,我能够在紧密的循环中从Cython调用lapack和blas例程,而没有Python调用开销。 我在这里找到了一个例子。但是,该示例取决于SAGE。我希望我的模块无需安装SAGE就可以安装,因为我的用户不太可能需要SAGE或其他任何东西。我的用户可能安装了numpy,scipy,pandas和scikit Learn之类的程序包,因此这些程序包是合理的依赖项。使用的接口的最佳组合是什么?最小的setup.py文件看起来像什么,可以从中获取编译所需的信息(从numpy,scipy等)? 编辑: 这就是我最终在做什么。它可以在我的Macbook上使用,但我不知道它的便携性。当然有更好的方法。 from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext import numpy from Cython.Build import cythonize from numpy.distutils.system_info import get_info # TODO: This cannot be the right way blas_include = get_info('blas_opt')['extra_compile_args'][1][2:] includes = [blas_include,numpy.get_include()] setup( cmdclass = {'build_ext': build_ext}, ext_modules = cythonize([Extension("cylapack", ["cylapack.pyx"], …
67 python  numpy  cython  lapack  blas 

1
tar.gz的pip安装中没有名为“ Cython”的模块
我使用Poetry为示例程序包(https://github.com/iamishalkin/cyrtd)构建tar.gz和whl文件,然后尝试在pipenv环境中安装程序包。tar.gz安装失败,这是一条日志: $ poetry build ... $ pip install dist/cyrtd-0.1.0.tar.gz Processing c:\work2\cyrtd\dist\cyrtd-0.1.0.tar.gz Installing build dependencies ... done Getting requirements to build wheel ... done Preparing wheel metadata ... done Requirement already satisfied: cython<0.30.0,>=0.29.13 in c:\users\ivan.mishalkin\.virtualenvs\cyrtd-tpdvsw8x\lib\site-packages (from cyrtd==0.1.0) (0.29.15) Building wheels for collected packages: cyrtd Building wheel for cyrtd (PEP 517) ... …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.