【编译Python代码以使用Cython静态链接可执行文件】教程文章相关的互联网学习教程文章

python-Cython扩展类:如何在自动生成的C结构中公开方法?【代码】

我已经有了定义某些需要使用的类的C代码,但是我需要能够将这些类发送给Python代码.具体来说,我需要在C中创建类实例,创建Python对象以用作这些C对象的包装,然后将这些Python对象传递给Python代码进行处理.这只是大型C程序的一部分,因此最终需要使用C / Python API在C中完成. 为了使生活更轻松,我使用Cython定义了扩展类(cdef类),这些扩展类用作C对象的Python包装器.我使用的典型格式是cdef类包含指向C类的指针,然后在创建cdef类实例...

python-如何在readthedocs上记录cython函数【代码】

在ReadTheDocs上,我不允许编译cython扩展名,是否可以配置sphinx以便从cython文件中提取文档字符串而无需实际编译它们? 谢谢!解决方法:我遇到了同样的问题,发现现在可以在readthedocs上编译Cython扩展了. 简短答案:Cython模块可以使用readthedocs提供的virtualenv功能进行编译. 有关稍长的答案和示例项目,请参见下文. 问题是什么? 据我了解,sphinx导入了将要记录的项目的所有模块,然后在python中提取文档字符串.对于Cython模块,...

python-Cython扩展类型支持类属性吗?【代码】

Python类可以具有类属性:class Foo(object):bar = 4是否存在用于在Cython扩展类型中定义类属性的类似构造?例如,当我尝试编译以下cython代码时cdef class Foo:cdef int barbar = 4我收到此错误:thing.c:773:3: error: use of undeclared identifier 'bar'bar = 4;^ 1 error generated. error: command 'cc' failed with exit status 1解决方法:简短的答案是是和不是. 不,没有方便的语法习惯用法,可以在cdef类中快速插入类属性.但...

python -c malloc数组指针在cython中返回【代码】

如何有效地将cython中的malloc数组指针(或numpy数组指针)返回到python3. 只要我不返回数组指针,cython代码就可以正常工作 我想要:def double complex* randn_zig(int n):...r = malloc(n*n*sizeof(double complex))...return rc11(gcc 11)等价物是:double complex* randn_zig(int n){r = malloc(n*n*sizeof(double complex))return r }我努力了< double complex *> randn_zig(int n): 和randn_zig(< double complex *> r,int n)...

python – Cython&C:通过引用传递【代码】

我是Cython和C的菜鸟,所以我对论证传递有疑问.我想避免在以下场景中传递参数的副本:# somefile.pyx #distutils: language = c++ from libcpp.vector cimport vectordef add_one(vector[int] vect):cdef int in = vect.size()for i in range(n):vect[i] += 1cdef vector[int] v for i in range(100000):v.push_back(i) add_one(v) # <-- ??我希望方法add_one只是修改v“就地”.我相信C,你可以通过使用&预先挂起参数来实现这一点,这...

python – 在Cython与NumPy中汇总int和float时的大性能差异【代码】

我使用Cython或NumPy对一维数组中的每个元素求和.当求和整数时,Cython的速度提高了约20%.总结浮点数时,Cython慢??约2.5倍.以下是使用的两个简单函数.#cython: boundscheck=False #cython: wraparound=Falsedef sum_int(ndarray[np.int64_t] a):cdef:Py_ssize_t i, n = len(a)np.int64_t total = 0for i in range(n):total += a[i]return total def sum_float(ndarray[np.float64_t] a):cdef:Py_ssize_t i, n = len(a)np.float64_t...

编译Python代码以使用Cython静态链接可执行文件【代码】

我有一个纯Python脚本,我想分发给具有未知Python配置的系统.因此,我想将Python代码编译为独立的可执行文件. 我运行cython –embed ./foo.py而没有问题给foo.c.然后,我跑了gcc $(python3-config --cflags) $(python3-config --ldflags) ./foo.cpython3-config –cflags给出的位置-I/usr/include/python3.5m -I/usr/include/python3.5m -Wno-unused-result -Wsign-compare -g -fdebug-prefix-map=/build/python3.5-MLq5fN/python3.5...

如何构建和分发依赖于第三方libFoo.so的Python / Cython包【代码】

我编写了一个依赖于某些C扩展的Python模块.这些C扩展依赖于几个已编译的C库.我希望能够分发与所有依赖项捆绑在一起的这个模块. 我把一个最小的例子(it can be found on GitHub in its entirety)放在一起. 目录结构是:$tree . . ├── README.md ├── poc │?? ├── __init__.py │?? ├── cython_extensions │?? │?? ├── __init__.py │?? │?? ├── cvRoberts_dns.c │?? │?? ├── cvRoberts_dns.h │?? │?? ├...

python – 使用现有C对象初始化Cython对象【代码】

C模型 假设我有以下C数据结构,我希望向Python公开.#include <memory> #include <vector>struct mystruct {int a, b, c, d, e, f, g, h, i, j, k, l, m; };typedef std::vector<std::shared_ptr<mystruct>> mystruct_list;提升Python 我可以使用boost :: python使用以下代码相当有效地包装它们,轻松地允许我使用现有的mystruct(复制shared_ptr)而不是重新创建现有对象.#include "mystruct.h" #include <boost/python.hpp>using name...

Cython,Python和KeyboardInterrupt被忽略了【代码】

有没有办法根据嵌入在Cython扩展中的循环中断(Ctrl C)Python脚本? 我有以下python脚本:def main():# Intantiate simulatorsim = PySimulator()sim.Run()if __name__ == "__main__":# Try to deal with Ctrl+C to abort the running simulation in terminal# (Doesn't work...)try:sys.exit(main())except (KeyboardInterrupt, SystemExit):print '\n! Received keyboard interrupt, quitting threads.\n'这将运行一个循环,它是C ...

Cython,有没有办法只创建一种类型的列表? (与Python列表不同)

在我的Group类中,必须有一个属性粒子,它应该是一个类似数组但可以调整大小的类型,它只能容纳粒子实例.使用cdef声明类和Group这两个类. 由于Python列表可以携带任何Python对象,我认为可能有一种更高效的方式来声明某种只接受粒子实例的C列表.在C中,它将类似于List< Particle> particle = new List< Particle>();我认为. 是否有任何Cython的等价物或我应该留在Python列表?解决方法:问题有待提出:你为什么要这样? >它是为了提高效率...

python – 提高cython数组索引速度【代码】

我有一个非常简单的功能,我需要加快速度.基本上我有一个16位数字的大数组,其中有一些洞. (大约10%)我需要遍历数组,找到连续有2 0的区域,然后用前一个和下一个元素的平均值填充它们.这在C中只需要几毫秒,但Python正在变得更糟. 我已经从普通的python数组转换为numpy数组,然后使用cython编译我的代码,但我仍然远离我的目标.我希望有更多经验的人可以看看我在做什么并给我一些反馈. 我的常规python代码如下所示:self.rawData = nump...

python – 使用数组广播加速循环的Cython【代码】

摘要: 你们太棒了……我的真实代码正常运行.我接受了JoshAdel的建议,即: 1)将所有ndarray更改为键入的内存视图2)手动展开所有numpy数组计算3)为索引使用静态定义的unsigned int4)禁用boundscheck和wraparound 而且,非常感谢Veedrac的洞察力! 原帖: 我知道python做这些代码真的很慢:import numpy as npdef func0():x = 0.for i in range(1000):x += 1.return如果我将其更改为Cython,它可以更快:import numpy as np cimport nu...

python – Fortran喜欢在Cython中进行数组切片【代码】

我正在寻找一种简洁有效的方法来获取多维数组切片,对这些切片执行标量和矩阵运算,然后最终将结果数组保存为另一个数组中的切片. 您可以使用以下语法在fortran中做得很好:real*8, dimension(4,4,4,4) :: matrix_a real*8, dimension(4,4) :: matrix_b ... matrix_a(:, 2, :, 4) = matrix_a(:, 2, :, 4) + (2 * matrix_b(:, :))我试图在Cython中找到这样做的方法.这是我能想到的最好的:cdef double...

Python64+win10_64+cython+msys2(ming64)踩坑记【代码】

一直在linux下用python,一直妥妥的,从没想过在windows下编译cython模块,直到昨天…… 过程是曲折的,解决方法是简单的,时间不多,长话短说,直接先来个传送门: https://www.jianshu.com/p/50105307dea5 这里的步骤是可以的,因为我用的msys2,所以过程有一点点曲折,下边补充说明一下: msys2算是个windows下的linux系统,里边一共包含了3套工具链, 比如安装GCC,可以直接安装gcc这个包,也可以安装mingw-w64-i686-gcc或者mi...

链接 - 相关标签