当前位置: 首页 > 科技观察

Anaconda、CPython以及更多:关于各Python发行版,我们需要了解的一切

时间:2023-03-13 11:56:24 科技观察

Anaconda、CPython等:我们需要了解的关于每个Python发行版的所有信息哪些用例是合适的。在选择Python语言进行软件开发时,我们实际上面临着一个庞大的语言生态系统——包括涵盖无数编程需求的各种软件包。但除了从GUI开发到机器学习的库之外,您还可以从各种Python运行时中进行选择——其中一些可能更适合您当前的用例条件。下面,我们简要介绍了当今一些最常用的Python发行版——从标准实现(CPython)到速度优化版本(PyPy),再到特殊用例(Anaconda、ActivePython)以及最初到完全不同的其他发行版。语言设计的运行时(Jython、IronPython)。目录CPythonAnacondaPythonActivePythonPyPyJython1.CPythonCPython属于Python参考实现方案,可以看作是所有其他Python衍生发行版的一套标准化版本。CPython是用C语言编写的,其编写者包括数名Python语言最高决策层的核心人员。1.CPython用例CPython是Python的参考实现版本,因为它在优化方面是最保守的。当然,这不是缺点,而是一种设计取向。Python的维护者希望使CPython成为Python最广泛兼容和标准化的实现。CPython最适合需要高度兼容性和符合Python标准的用户。此外,CPython也适合那些希望以最基本的方式使用Python并愿意为它放弃一些便利的专业人士。例如,您需要进行一些调整才能使用CPython设置虚拟环境。而其他发行版(Anaconda)在工作区设置中提供更多自动化。2.CPython的局限性CPython没有像其他版本的Python那样深度优化性能。它不提供本机JIT(即时)编译器,没有加速数学库,也没有第三方插件来提高性能。当然你可以根据自己的需要自己添加,但是它并没有直接提供绑定包。当然,这一切都是由设计取向决定的,旨在保证CPython作为一套参考实现版本,能够做到最大程度的兼容和标准化。以及性能优化——开发者可以选择添加其他匹配的工具包。此外,CPython仅提供一组用于使用Python的基准工具。例如,pip包管理器从Python的本机PyPI包存储库中获取并安装包。如果开发人员允许,Pip甚至可以安装预编译的二进制文件(通过轮盘分发格式),但不能安装PyPI不包含的任何其他包依赖项。2.AnacondaPythonAnaconda起源于Anaconda公司(前身为ContinuumAnalytics),其设计目标是服务于那些需要商业供应商支持并拥有企业支持服务的Python开发者。AnacondaPython的主要用例包括数学、统计、工程、数据分析、机器学习和其他相关应用程序。一、AnacondaPython用例Anaconda捆绑了Python商业和科学使用场景中的各种常用库——包括SciPy、NumPy和Numba等,并通过定制的包管理系统提供更多的库访问能力。Anaconda最突出的特点是将上述元素高效地结合在一起。安装后,Anaconda提供了桌面应用程序AnacondaNavigator,可以通过便捷的GUI帮助用户使用Anaconda环境中的各种功能。与CPython相比,Anaconda中的组件搜索、更新和使用过程更加简单。另一大优势是,Anaconda可以根据特定包的需要处理Python生态系统之外的组件。其中,专门为Anaconda打造的conda包管理器,可以根据外部软件需求安装Python和第三方软件包。2.AnacondaPython的局限性由于Anaconda包含大量实用的库,并且可以通过简单的操作安装更多的库,因此Anaconda的安装量往往比CPython大很多。一个基本的CPython安装大约需要100MB才能运行,而Anaconda会迅速增长到千兆字节。如果您的资源有限,这可能会有问题。帮助Anaconda精简的方法之一是安装Miniconda,它是Anaconda的精简版,仅包含启动和运行所需的部分。如有必要,您可以将包添加到Miniconda并留意每个包占用的空间。3.ActivePython类似于Anaconda。ActivePython也是由一家营利性企业——ActiveStateCorporation创建和维护的。该公司还销售多语言运行时以及多语言KomodoIDE。1.ActivePython用例ActivePython主要面向业务用户和数据科学家——即他们想使用Python语言,但又不想浪费大量精力在Python的组装和管理上。ActivePython使用Python中的普通pip包管理器,但也在经过认证的tarball中提供了数百个公共库,以及一些其他具有第三方依赖项的公共库,例如IntelMathKernel库。2.ActivePython的局限性ActivePython处理软件包外部依赖性的方式存在一个主要的潜在缺点。如果您希望将现有项目(例如TensorFlow)升级到具有复杂依赖项的较新版本,您还需要升级ActivePython。如果开发工作是在与项目的特定版本关联的环境中完成的,这无关紧要。但是,当前的开发工作往往需要跟上前沿版本的发布。在这种情况下,大家往往会遇到很多麻烦。4.PyPyPyPy是CPython解释器的替代品,它使用即时(JIT)编译来加速Python程序的执行。根据正在执行的实际任务,性能提升可能非常显着。1.PyPy用例人们对Python,尤其是CPython的抱怨,主要围绕着它的速度性能。默认情况下,Python的运行速度远不及C——可能快数百倍。PyPyJIT将Python代码编译成机器语言,平均速度是CPython的7.7倍。在某些特定任务中,其提速效果可达50倍。更重要的是,开发者可以更轻松地享受这些便利。将CPython换成PyPy,您就几乎完成了加速。2.PyPy的局限性PyPy通常更适合处理“纯”Python应用程序。由于PyPy模拟CPYthon的本机二进制接口,因此在处理包含C库接口的Python包(例如NumPy)时,它的性能不佳。然而,随着时间的推移,PyPy开发人员逐渐解决了这个问题,并使PyPy与依赖C扩展的Python包更加兼容。但必须承认,虽然有所改进,但PyPy对C扩展的支持仍然有限。PyPy的另一大缺点是运行时大小。Windows上的核心CPython运行时(没有标准库)大约为4MB,而PyPy运行时大约为32MB。还需要注意的是,PyPy长期以来一直基于Python的2.x分支。比如目前面向Python3.x版本的PyPy目前只提供32位Windows系统的beta测试版。(PyPy已经为Linux和MacOS上的Python2x和3.x提供了64位版本。)第五,JythonJVM(Java虚拟机)可以作为除Java之外的多种语言的运行时选项。长长的列表包括Groovy、Scala、Clojure、Kotlin、Python,当然还有Jython。1.Jython用例Jython项目可以将Python2.x编译成JVM字节码并在JVM上运行生成的程序。在某些情况下,Jython编译的程序甚至可以比CPython编译的程序运行得更快——但并非总是如此。Jython提供的最大优势是能够直接与Java生态系统的其余部分进行互操作。Java比Python使用更广泛。通过在JVM上运行Python,开发人员将能够享受一个庞大的库和框架生态系统,这些库和框架不是为Python开发的。同样,Jython也允许Java开发人员使用Python库。2.Jython的局限性Jython最大的缺点是它只支持Python2.x版本。对Python3.x的支持目前正在开发中,但这需要相当长的时间。目前没有发布相关版本。另请注意,虽然Jython可以将Python引入JVM,但它不能将Python引入Android。由于Jython当前没有适用于Android的端口,因此Jython不能用于开发Android应用程序。6.IronPython类似于Jython将Python实现定位在JVM上。IronPython属于一组基于.Net运行时或CLR(公共语言运行时)的Python实现。IronPython利用CLR的DLR(动态语言运行时)允许Python程序以相当于CPython的动态级别运行。1.IronPython用例与Jython类似,IronPython也是一种桥梁。它的主要用例是实现Python和.Net之间的互操作性。可以使用Python的本机导入和对象操作语法将现有的.Net程序集加载到IronPython程序中。另外,我们也可以将IronPython代码编译成程序集,直接运行或者接受其他语言的调用。但需要注意的是MSIL(MicrosoftIntermediateLanguage)不能被其他.Net语言直接访问,因为它不支持通用语言规范。2.IronPython的局限性与Jython类似。IronPython目前仅支持Python2.x版本。但是,IronPython3.x实施已经在密集开发中。原标题:Anaconda,CPython,PyPy,andmore:KnowyourPythondistributions,作者:SerdarYegulalp