关于Cython
赛马拉松是一个优化静态编译器对于两个蟒蛇编程语言和扩展的Cython编程语言(基于派热克斯).它使得为Python编写C扩展和Pythons本身一样简单。
Cython为您提供了Python和C的组合功能,使您能够
Cython语言是蟒蛇语言另外支持呼叫C函数并声明C类变量和类属性。这允许编译器生成非常高效C代码来自Cython代码。C代码是生成一次然后编译所有主要中的C/C++编译器CPython公司2.6, 2.7 (2.4+Cython 0.20.x)以及3.5及所有更高版本。我们定期对所有支持的CPython版本和他们最新的in-development分支,以确保生成的代码保持不变广泛兼容并适合每个版本。派比支持是正在进行的工作(双方)并被考虑大部分可用自Cython 0.17起。这里始终建议使用最新的PyPy版本。
所有这些都使Cython成为包装外部C库,嵌入将CPython转换为现有应用程序,和快速C模块加快了执行Python代码。
🌷️ 你的捐款可以帮助赛马项目!🌷️️
让Cython成为适合您的优秀编程语言,并与Python生态系统和不断变化的需求保持同步其多样化的用户群,需要很多时间和奉献精神.支持维护和Cython语言和编译器的未来发展,你可以赞助斯特凡·贝内尔通过:
请注意,PayPal对小额非欧元支付收取5-15%的费用,这是你在没有帮助我们的情况下支付的钱。考虑注册GitHub赞助商订阅。
文档
外部资源:
如果您还有问题,请随时发送电子邮件至cython用户邮件列表.核心开发的各个方面将在cython核心开发人员邮件列表。如果您不确定要使用哪个列表,那么cython用户列表可能是正确的,因为它拥有更多的受众。还有一个#赛马freenode IRC服务器上的频道,用于Cython相关聊天。
下载
Cython可在开源 Apache许可证.
这个最新版本Cython为3.0.10(发布日期:2024-03-30)。Cython可从PyPI公司 包索引存储库.
人
核心开发人员:斯特凡·贝内尔,罗伯特·布拉德肖,大卫·伍兹,马图什·瓦洛,利桑德罗·达林
贡献者:马克·阿布拉莫维茨,威切特·阿克曼,马丁·阿尔布雷希特,彼得·亚历山大,弗朗西斯科·阿尔泰德,伊万·安德鲁斯,Arfrever Frehtes Taifersar Arahesis,菲利普·奥斯汀,乔什·艾尔斯,白浩宇,格兰特·贝利,尼古拉斯·巴比,古斯塔沃·巴比里,大卫·巴内特,安德烈亚·贝迪尼,布莱恩·毕晓普,查克·布莱克,阿列克谢·博尔岑科夫,乔治·布兰德,尼尔斯·布劳恩,埃里克·布雷,马修·布雷特,尼尔斯·布鲁恩,马蒂亚斯·布桑尼尔,拉尔斯·别丁克,弗拉基米尔·塞尔尼,Ondrej Certik,沙拉布·查图尔维迪,Eric Chlebek,David Christenson,克雷格·西特罗,蒂莫西·克莱曼斯,布莱恩·科尔,法维安·孔特雷拉斯,戴夫·库纳波,安德烈亚斯·范·克兰伯格,安东尼奥·库尼,阿蒙·戴加,朱利安·丹茹,杰伦·德梅耶,埃里克·迪尔,尼古拉斯·杜马泽,阿里·易卜拉欣,约翰·艾尔斯曼,迈克尔·恩·林,杰森·埃文斯,伊苏鲁·费尔南多,埃里克·福林,马克·弗洛里森,克劳迪奥·弗雷尔,Danilo Freitas,Bradley Froehle,加里·弗尼什,Syam Gadde,马丁·盖坦,加布里埃尔·盖尔纳,克里斯托夫·高尔克,Evgeny Golyshev,布莱恩·格兰杰,奥利维尔·格里塞尔,克里斯托夫·格罗斯,杰森·格鲁,罗曼·吉尔伯特,阿德里安·吉尼特,瓦伦汀·哈内尔,雅罗斯拉夫·哈尔琴科,理查德·汉森,凯·海恩,伊恩·亨利克森,菲利普·赫伦,马格努斯·利·赫特兰,David Hirschfeld,黄佳军,托马斯·饥饿,埃里克·胡斯,Naoki Inada,乔·杰夫尼克,Omer Katz,卡尔·坎佩,雷夫·凯特勒,杰罗姆·基弗,W.特雷弗·金,吉姆·克莱克纳,罗南·拉米,托尔斯滕·兰肖夫,克里斯·拉舍尔,谢尔盖·列别捷夫,安东尼·李,比约恩·林斯,马克·洛达托,托马斯·洛茨,维贾·马卡罗夫,安格斯·麦克莫兰,David McNab,杰森·麦登,梅杰雪蒂斯,Yesudeep Mangalapilly,塔迪乌·曼诺尔,瓦西尔·马诺洛夫,加布里埃尔·德·马尔米塞,斯图拉·莫尔登,曼苏尔·穆菲德,尼基塔·内姆金,大卫·诺盖拉,Andrew Ohana,杰·奥斯特,奥利维尔·帕科莱,布伦特·佩德森,马克·皮克,克里斯·珀金斯,加布里埃尔·佩蒂尔,Emmanuel Gil Peyrot,马蒂·皮库斯,安托万·皮特鲁,安德烈·普洛特尼科夫,保罗·普雷斯科德,Prabhu Ramachandran,杰夫·兰纳尼,霍尔格·拉普,尼古拉斯·拉特,佩因托·雷内,阿明·里戈,Joon Ro,费比安·罗斯特,拉尔夫·施密特,迈克尔·塞弗特,达格·斯维尔·塞尔杰博顿。科尔宾·辛普森,基里尔·斯梅尔科夫,伊万·斯米尔诺夫,库尔特·史密斯,纳撒尼尔·史密斯,威廉·斯坦因,安德鲁·斯特劳,孙伯祥,Arfrever Taifersar Arahesis,迪米特里·卡西奇,格雷戈·塔哈默尔,凯文·桑顿,彼得·托德,埃里克·托勒鲁德,大卫·维埃拉,彼得·维克托林,马修·维贝尔,Pauli Virtanen,雅库布·威尔克,卡尔·威蒂,Felix Wu,Yury Zaytsev,杰尔·齐伊斯特拉(Jelle Zijlstra)。
财务捐款:谷歌和Enthought公司资助Dag Seljebotn大幅提高Cython与NumPy的集成.Kurt Smith和Danilo Freitas通过谷歌代码夏令营程序分别用于改进Fortran和C++支持,2010年,白浩宇被资助从事Python 3兼容性.
特别感谢感谢Greg Ewing发明和开发Cython的前身派热克斯以及他在语言设计决策方面的宝贵贡献。
有用的链接
用户对Cython的评价:
»你会期望许多组织和人员都喜欢它的高级语言与Python差不多,但速度和与C一样,一丝不苟。
此外,还可以与两者无缝集成您现有的C/++代码库和Python代码库很容易混合具有极低级别机器访问的高级抽象。。。清楚的获胜者。« →邓皮尔c.l.py上
»你们摇滚!在scikit-learn中,我们早就决定进行Cython,而不是C或C++语言。这个决定是一个明显的胜利,因为代码要多得多可维护。我们必须说服新的投稿人,Cython对他们来说更好,但代码的可读性和支持多个Python版本,这是值得的。«→加勒·瓦罗佐
»最大的惊喜(当然这是Cython的销售要点)高层和低级之间的接口有多简单代码变得非常健壮。
很高兴看到周围有几个活跃的项目试图加速Python。赛马人的优点是它不会给你“C的一半速度”或“可能接近C的速度”C,3年后”--它给出了实际交易,-O3 C,并且它有效马上。« →弗雷德里克·约翰逊
»SciPy大约50%是Python,25%是Fortran,20%是C,3%是Cython和2%C++…SciPy中二级编程语言的分布是一种强大的、具有表现力的语言之间的折衷与Python(即Cython)和语言的使用交互良好(和他们的库)已经被证明比许多几十年。
对于实现新功能,Python仍然是一种语言选择。如果Python性能是一个问题,那么我们更喜欢使用Cython后跟C、C++或Fortran(按顺序)。主要动机因为这是可维护性:Cython具有最高的抽象级别,并且大多数Python开发人员都会理解它。C语言也广为人知当前的核心开发团队比C++和尤其是Fortran。« →Pauli Virtanen等人,SciPy
»更不用说生成的C经常使用表演技巧太枯燥或晦涩,无法手写,部分原因是科学计算的不断推动。而且通过这一切,Cython代码保持了高度集成使用Python本身,一直到堆栈跟踪和行号。
PayPal肯定从他们的努力中受益匪浅高性能Cython用户,如gevent、lxml和NumPy。虽然我们的自2015年以来,Cython的第一次尝试并没有在2011年坚持下来,都是本土的已编写并重写扩展以使用Cython。«→马哈茂德·哈希米
»Cython生成的二进制文件与C++、Go和Rust非常相似。现在使用GitHub Actions对于开源项目,跨平台构建和发布过程可以免费自动化。这是一个巨大的机会,通过一个拉入请求。«→格兰特·詹克斯
»老实说,我再也不会写C了。赛马拉松给予我将Python的所有表现力与所有性能相结合和接近C的神奇力量。我一直在用它实现高性能的图遍历和路由算法,以及与C/C++库交互,这真是太棒了生产力提高。«→安德鲁·蒂普顿
»一般经验法则是,您的程序花费80%它需要运行20%的代码。因此,这是一个高效的好策略编码就是编写所有内容、分析代码并优化Python的分析器非常棒,Cython允许您只需付出最小的努力就可以完成后一步。«→霍伊特·科普克
»问题是,在自动生成的代码中,有多大程度是否存在漏洞,发电机中的漏洞有多大。这个第一次这样做时,我收到了很多来自工具的警告SWIG和Cython生成的代码[…]
基本上,我发现Cython发出的所有信号都是假阳性我的检查工具[CPyChecker]中的一个错误。« →大卫·马尔科姆
»基本上,Cython的速度大约是Boost的7倍。Python,其中让我大吃一惊。”→克里斯周
»使用Cython,您只需努力加快您需要处理的部分代码,并且无需处理变化很大。这与丢弃所有代码大不相同并重新实现另一种语言。它还需要你学习数量非常少。你也要保持Python编码人员可能会使用的Python-语法感谢。« →克雷格·麦康伯
»如果你有一块需要快速运行的Python,那么我建议您立即使用Cython。这意味着我可以同时利用Python的优点和C的速度,这是一个天作之合。« →斯塔夫罗斯
»从85秒(本文开头)降到0.8秒秒:减少100倍。。。谢谢你赛顿!:-)« →安德烈·罗贝奇
»从头开始编写完整的CPython模块可能如果你知道这些怪癖并且遵守纪律的。但对于一个还没有滴CPython C的人来说模块,Cython是天赐之物。
最终,有5种常用方法(CPython[C-API],Boost::Python、SWIG、Cython和ctypes)将C集成到Python,以及如果那是你的话,现在你要是不给西森打一针,那你就疯了需要。对于熟悉C和蟒蛇。« →阿什卡
»我喜欢Cython代码的地方是我使用了Python列表来管理漩涡对象。这表明我们可以使用用于管理对象的普通Python容器。这真是太棒了方便。[...]
很明显,如果您从头开始构建代码并且需要速度,赛马是一个很好的选择。为此,我真的要祝贺Cython和Pyrex开发人员。« →普拉布·拉马钱德兰
»我写了一个脚本,在中计算距离矩阵(O^2)带有Numpy数组和Cython中相同脚本的Python。我花了10英镑几分钟后,我了解了赛马拉松的工作原理,速度提高了550次!!!令人惊叹«→克法兰科伊
»我想汇报一个成功的赛马项目。成功的意义在于它比所有编写的代码都快得多我的前任主要是因为速度几乎呈线性增长与核心的数量。此外,代码更短且更容易阅读和维护。[...]
使其快速、简短、可读和可维护没有Cython会很难。« →亚历克斯·范·霍滕
»在工作中,我们已经开始使用Cython,并取得了巨大成功。我们将一个特定的Perl脚本重写为Cython,并实现了600%速度提升。作为一个Perl爱好者,这令人印象深刻。我们仍然获得Python的所有优点,例如快速开发和干净面向对象的设计模式,但速度相当于C→维姆·科霍夫
»我对Cython感兴趣的原因是执行多变量时遇到的计算时间函数求值的优化涉及求解scipy.integrate.odeint微分方程。简单地说将包含微分方程的类替换为Cython版本的计算时间下降了5倍。不错半个星期天下午工作→科尔宾宁
»我感到惊讶的是,让它同时工作是多么简单在Windows和Linux下。我不必处理生成文件或配置编译器。Cython与NumPy和SciPy集成良好。这扩展了使用Python可以执行的编程任务基本上。« →萨米·巴达维
»这就是为什么Scipy的人总是喋喋不休地谈论Cython——这是迅速成为(或已经成为)暴露的通用语言传统库到Python。他们的用户群有大量遗留代码或需要接口的外部库,以及Python在这一领域拥有如此出色的采用曲线的原因是因为Numpy简化了接口的数据部分。Cython也使代码部分相当轻松。« →彼得·Z·王
»添加了使用Cython编译fastavro的可选步骤。只要这样做,没有Cython特定代码,就可以减少处理从2.9秒到1.7秒的10K记录。还不错工作。« →米基·特贝卡
»fastavro编译Python代码,没有任何特定的赛马代码。在没有编译器用户的机器上使用此方法仍然可以使用fastavro。
最终的结果是,这个包读取Avro的速度比Java快并支持Python 2和Python3。使用Cython和一点这项工作没有付出太多努力就完成了。« →米基·特贝卡
»... 需要重写绑定,主要是因为当前绑定是直接用C++编写的,是一种维护噩梦。这个新的绑定是用Cython«编写的→巴斯蒂恩·莱昂纳德
»通过Cython生成代码可以生成更小、更易于维护的绑定,包括增加与所有受支持的Python版本的兼容性,而不会给NEST开发人员带来额外负担。«
这种方法减少了大约50%的代码占用空间,并显著提高了与Python绑定相关的代码的内聚性:虽然以前涉及七个核心文件和22个附加文件,但新方法只需要两个核心文件。新的实现还消除了编译时对NumPy的依赖性,并通过降低代码的复杂性和提高代码的可理解性提供了许多额外的可维护性优势。重新编写构建系统还减少了50%的代码,并通过其可用性和健壮性解决了多个问题。«
»总之,我们希望通过更广泛地使用Cython,神经科学软件开发人员能够将他们的创造力集中在改进算法和实现新功能上,而不是努力偿还累积的技术债务的利息。« →尤里·扎伊特塞夫(Yury V.Zaytsev)和阿比盖尔·莫里森(Abigail Morrison)
»Cython版本花了大约30分钟来编写,它的运行速度与C代码一样快,因为,为什么它不能呢?实际上,它是C代码,只带了一些语法糖。你甚至不需要学习或思考一个外国的、复杂的C API……你只需要编写C或C++,尽管这有点尴尬。Cython版和C版都比使用Numpy数组的纯Python版本快约70倍。«→马修·洪尼瓦尔
»我喜欢这个项目。为本机库编写Python绑定或加速计算密集型代码而无需自己编写C的神奇方法。« →施迈克尔
»我使用了很多pyrex/cython绑定到库——用python编写代码要快得多。这是一个巨大的恩惠。之前用过swig、手写包装纸和pyrex,我可以说我更喜欢cython。谢谢你的辛勤工作。« →jnazario公司
»我不擅长C语言,所以我在研究中主要使用纯python。然而,现在处理1000多个分子的簇时,我的代码中存在巨大的瓶颈。
使用cython,它从以小时为单位的单个计算变为以秒为单位的计算,聚焦效果很好。。。« →鱼痒
»Cython让你摆脱了C的许多困境。你通常会得到的最坏结果是缺乏性能提升(此时cython-a是你的朋友)。写出你能得到的所有性能可能需要对C语言有合理的操作知识,但你不必那么了解它就能做得很好。« →lmcinnes公司
»[spaCy是用干净但高效的Cython代码编写的,这使我们能够在单个代码库。« →马修·洪尼瓦尔
»[uvloop]是用Cython写的,顺便说一句,Cyton真是太棒了。不幸的是,它的传播范围没有那么广,我认为它有点低估了你在赛马中的能力。本质上,它是一个Python语言的超集,您可以严格键入它,它将编译成C语言,您将获得C速度。你很容易做到,语法更类似于Python。一定要看看赛马拉松。« →尤里·塞利瓦诺夫(视频@22:50)
»300.000 req/sec与Go的内置web服务器相当(我这么说是基于几年前我做的一次粗略测试)。考虑到围棋就是这样设计的,这真的令人印象深刻。我很荣幸您选择使用Cython。« →比尔敦
»Cython是Python最保守的秘密之一。它扩展了Python朝着解决语言许多缺点的方向发展和平台« →乌拉什·图尔克曼
更多。。。更少。。。