精华内容
下载资源
问答
  • cpython
    千次阅读
    2020-11-29 09:40:29

    CPython是特指C语言实现的Python,就是原汁原味的Python。

    之所以使用CPython这个词,是因为Python还有一些其它的实现,比如Jython,就是Java版的Python,还有烧脑的PyPy,使用Python再把Python实现了一遍。

    如下是官方对CPython的说明:

    CPython is Guido van Rossum’s reference version of the Python computing language. It’s most often called simply “Python”; speakers say “CPython” generally to distinguish it explicitly from other implementations.

    这个页面对Python各种不同的实现有一个说明:

    https://wiki.python.org/moin/PythonImplementations?action=show&redirect=implementation

    当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。

    由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

    CPython

    当我们从Python官方网站下载并安装好Python 3.5后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

    CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

    IPython

    IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

    CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

    PyPy

    PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

    绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

    Jython

    Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

    IronPython

    IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

    ---------------------

    作者:Reacubeth

    来源:CSDN

    原文:https://blog.csdn.net/xyisv/article/details/79389626

    版权声明:本文为博主原创文章,转载请附上博文链接!

    更多相关内容
  • 更快的CPython快五倍我们希望在接下来的四个发行版中将CPython的速度提高5倍。 请参阅以了解如何完成此操作。付钱要使CPython快这个数量,将需要资金。 依靠核心开发人员的商誉和业余时间是不够的。 请参阅,以了解...
  • 下载编译好的含有bz2的so文件 将_bz2.cpython-37m-x86_64-linux-gnu.so放到对应的python3.7文件夹里…/python3.7/lib-dynload/下 测试: python3 import bz2
  • 发生以下错误: 从_bz2导入BZ2Compressor,BZ2Decompressor ImportError:没有名为“ _bz2”的模块 复制到/lib/python3.8/lib-dynload
  • CPython内部 这是一个存储库,其中包含CPython解释器的代码示例。 从一本名为“ CPython Internals”的Real Python书籍中学习。
  • 赠送jar包:cpython-3.10.2-1.5.7.jar; 赠送原API文档:cpython-3.10.2-1.5.7-javadoc.jar; 赠送源代码:cpython-3.10.2-1.5.7-sources.jar; 赠送Maven依赖信息文件:cpython-3.10.2-1.5.7.pom; 包含翻译后的API...
  • Python3.6的bz2模块需要的so文件,可复制到lib/python3.6/lib-dynload使用
  • CPython教程

    万次阅读 2019-06-20 20:53:48
    CPython-Tutorial-zh 中文CPython教程 简述 Python有时候太慢,如果手动编译C或者是C++来写#include<Python.h>的文件也比较麻烦。 CPython无疑是一个比较好的选择。 这篇教程是基于 ......

    CPython-Tutorial-zh

    中文CPython教程

    简述

    Python有时候太慢,如果手动编译C或者是C++来写#include<Python.h>的文件也比较麻烦。
    CPython无疑是一个比较好的选择。

    这篇教程是基于

    改进的理由

    来源于link1的

    1. 每一行的计算量很少,因此python解释器的开销就会变的很重要。
    2. 数据的局部性原理:很可能是,当使用C的时候,更多的数据可以塞进CPU的cache中,因为Python的元素都是Object,而每个Object都是通过字典实现的,cache对这个数据不很友好。

    项目

    Hello World项目

    第一个项目是Hello world。

    创建一个文件helloworld.pyx,内容如下:

    print("Hello world!")
    

    保存后,创建setup.py文件,内容如下:

    from distutils.core import setup
    from Cython.Build import cythonize
    
    setup(
        ext_modules = cythonize("helloworld.pyx")
    )
    

    保存后,命令行进入setup.py所在目录,并输入python setup.py build_ext --inplace,如下:

    PS D:\Code\CPython\Test> python setup.py build_ext --inplace
    Compiling helloworld.pyx because it changed.
    [1/1] Cythonizing helloworld.pyx
    running build_ext
    building 'helloworld' extension
    creating build
    creating build\temp.win-amd64-3.6
    creating build\temp.win-amd64-3.6\Release
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -IC:\Users\lijy2\AppData\Local\Programs\Python\Python36\include -IC:\Users\lijy2\AppData\Local\Programs\Python\Python36\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\cppwinrt" /Tchelloworld.c /Fobuild\temp.win-amd64-3.6\Release\helloworld.obj
    helloworld.c
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\bin\HostX86\x64\link.exe /nologo
    /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:C:\Users\lijy2\AppData\Local\Programs\Python\Python36\libs /LIBPATH:C:\Users\lijy2\AppData\Local\Programs\Python\Python36\PCbuild\amd64 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\ATLMFC\lib\x64" "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.16299.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.16299.0\um\x64" /EXPORT:PyInit_helloworld build\temp.win-amd64-3.6\Release\helloworld.obj /OUT:D:\Code\CPython\Test\helloworld.cp36-win_amd64.pyd /IMPLIB:build\temp.win-amd64-3.6\Release\helloworld.cp36-win_amd64.lib
      正在创建库 build\temp.win-amd64-3.6\Release\helloworld.cp36-win_amd64.lib 和对象 build\temp.win-amd64-3.6\Release\helloworld.cp36-win_amd64.exp
    正在生成代码
    已完成代码的生成
    

    在该目录下的命令行进入Python操作界面,导入包之后,就会自动输出Hello world!,如下:

    PS D:\Code\CPython\Test> python
    Python 3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import helloworld
    Hello world!
    

    这就完成了一个简单的CPython的扩展书写。下面再举例子。

    Fibonacci Function项目

    斐波那契数列:1, 1, 2, 3, 5,…
    前两位为1,之后每个数等于前面两个数之和。

    创建fib.pyx,内容如下:

    from __future__ import print_function
    
    def fib(n):
        a, b = 0, 1
        while b < n:
            print(b, end=' ')
            a, b = b, a + b
        print()
    

    创建setup.py文件,内容如下:

    from distutils.core import setup
    from Cython.Build import cythonize
    
    setup(
        ext_modules = cythonize("fib.pyx")
    )
    

    通过命令python setup.py build_ext --inplace,生成出来的文件:

    import fib
    fib.fib(100)
    

    输出:

    1 1 2 3 5 8 13 21 34 55 89
    
    • 但是经过测试之后,发现速度并没有很高的提升,很可能是操作本来就很简单,数值也很小,没什么优化的空间了。

    Primes项目

    给一个数值n,输出前n个质数(list)。

    写到primes.pyx中:

    def primes(int nb_primes):
        cdef int n, i, len_p
        cdef int p[1000]
        if nb_primes > 1000:
            nb_primes = 1000
        
        len_p = 0
        n = 2
        while len_p < nb_primes:
            for i in p[:len_p]:
                if n % i == 0:
                    break
            else:
                p[len_p] = n
                len_p += 1
            n += 1
        result_as_list = [prime for prime in p[:len_p]]
        return result_as_list
    

    同理,setup.py文件内容为:

    from distutils.core import setup
    from Cython.Build import cythonize
    
    setup(
        ext_modules = cythonize("primes.pyx")
    )
    

    在参考的link中给出了测试的案例,有些解释的不太好,我这边描述一下

    • 直接使用Python实现版本,平均用时23ms
    • Python版本用CPython编译(对,直接把Python文件名字像pyx一样放进去就好了), 平均用时11ms
    • pyx的CPython编译版本,平均用时1.6ms

    Stat项目

    注意,这里不能直接使用stat,因为似乎是有这个库了emmmm

    stat_.pyx:

    from libc.math cimport sqrt
    
    def mean(list arr):
        cdef:
            int i
            int sz
            double tmp
        tmp = 0
        sz = len(arr)
        for i in range(sz):
            tmp += arr[i]
        return tmp / sz
    
    def std(list arr):
        cdef:
            double m = mean(arr)
            int sz, i
            double tmp
        sz = len(arr)
        tmp = 0
        for i in range(sz):
            tmp += (arr[i] - m) ** 2
        return sqrt(tmp)
    

    setup.py:

    from distutils.core import setup
    from Cython.Build import cythonize
    
    setup(
        ext_modules = cythonize("stat_.pyx")
    )
    

    命令还是一样的:python setup.py build_ext --inplace

    测试:

    >>> import stat_
    >>> a = [1,2,3]
    >>> stat_.mean(a)
    2.0
    >>> stat_.std(a)
    1.4142135623730951
    
    展开全文
  • CPython学习

    千次阅读 2022-04-07 14:40:25
    之所以使用CPython这个词,是因为Python还有一些其它的实现,比如Jython,就是Java版的Python,还有烧脑的PyPy,使用Python再把Python实现了一遍。 如下是官方对CPython的说明: CPython is Guido van

    前言

    Python有时候太慢,如果手动编译C或者是C++来写#include<Python.h>的文件也比较麻烦。
    CPython无疑是一个比较好的选择。
    在这里插入图片描述

    简介

    CPython是特指C语言实现的Python,就是原汁原味的Python。

    之所以使用CPython这个词,是因为Python还有一些其它的实现,比如Jython,就是Java版的Python,还有烧脑的PyPy,使用Python再把Python实现了一遍。

    如下是官方对CPython的说明:

    CPython is Guido van Rossum’s reference version of the Python computing language. It’s most often called simply “Python”; speakers say “CPython” generally to distinguish it explicitly from other implementations.

    案例

    先从一个Hello Word开始

    1. 创建一个文件helloworld.pyx,内容如下:

       print("Hello world!") #pyx文件是python的c扩展文件,代码要符合cython的规范,用什么编辑器写都行。
      
    2. 保存后,创建setup.py文件,内容如下:

       from distutils.core import setup
       from Cython.Build import cythonize
       
       setup(
           ext_modules = cythonize("helloworld.pyx")
       )
      
    3. 保存后,进入setup.py所在目录,并执行编译命令:

       python setup.py build_ext --inplace
      

      会输出如下结果:

      $python setup.py build_ext --inplace
      Compiling helloworld.pyx because it changed.
      [1/1] Cythonizing helloworld.pyx
      /anaconda3/envs/deeplearning/lib/python3.7/site-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive ‘language_level’ not set, using 2 for now (Py2). This will change in a later release! File: /Users/user/pytorch/NLP学习/learning_2.0/helloworld.pyx
      tree = Parsing.p_module(s, pxd, full_module_name)
      running build_ext
      building ‘helloworld’ extension
      creating build
      creating build/temp.macosx-10.9-x86_64-3.7
      gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/anaconda3/envs/deeplearning/include -arch x86_64 -I/anaconda3/envs/deeplearning/include -arch x86_64 -I/anaconda3/envs/deeplearning/include/python3.7m -c helloworld.c -o build/temp.macosx-10.9-x86_64-3.7/helloworld.o
      gcc -bundle -undefined dynamic_lookup -L/anaconda3/envs/deeplearning/lib -arch x86_64 -L/anaconda3/envs/deeplearning/lib -arch x86_64 -arch x86_64 build/temp.macosx-10.9-x86_64-3.7/helloworld.o -o /Users/user/pytorch/NLP学习/learning_2.0/helloworld.cpython-37m-darwin.so

    4. 运行完这个命令后,该目录下就会生成三个文件:

       build                    helloworld.pyx
       helloworld.c                setup.py
       helloworld.cpython-37m-darwin.so
      
    5. 然后创建一个调用文件test.py,内容为:

       import helloworld
      

      运行返回:

       i$ python test.py 
       Hello world!
      

    Fibonacci Function项目

    斐波那契数列:1, 1, 2, 3, 5,… 前两位为1,之后每个数等于前面两个数之和。

    创建fib.pyx,内容如下:

    from __future__ import print_function
    
    def fib(n):
        a, b = 0, 1
        while b < n:
            print(b, end=' ')
            a, b = b, a+b
        print()
    
    

    创建setup.py文件,内容如下:

    from distutils.core import setup
    from Cython.Build import cythonize
    
    setup(
        ext_modules = cythonize("fib.pyx")
    )
    

    通过命令python setup.py build_ext --inplace,生成出来的文件:

    python setup.py build_ext --inplace
    Compiling fib.pyx because it changed.
    [1/1] Cythonizing fib.pyx
    /anaconda3/envs/deeplearning/lib/python3.7/site-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /Users/user/pytorch/NLP学习/learning_2.0/fib.pyx
      tree = Parsing.p_module(s, pxd, full_module_name)
    running build_ext
    building 'fib' extension
    gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/anaconda3/envs/deeplearning/include -arch x86_64 -I/anaconda3/envs/deeplearning/include -arch x86_64 -I/anaconda3/envs/deeplearning/include/python3.7m -c fib.c -o build/temp.macosx-10.9-x86_64-3.7/fib.o
    gcc -bundle -undefined dynamic_lookup -L/anaconda3/envs/deeplearning/lib -arch x86_64 -L/anaconda3/envs/deeplearning/lib -arch x86_64 -arch x86_64 build/temp.macosx-10.9-x86_64-3.7/fib.o -o /Users/user/pytorch/NLP学习/learning_2.0/fib.cpython-37m-darwin.so
    

    测试test.py:

    import fib
    fib.fib(100)
    

    返回:

    $ python test.py 
    1 1 2 3 5 8 13 21 34 55 89 
    
    展开全文
  • 安装CPython解释器

    2021-09-07 07:55:43
    大家常说的Python是一门编程语言,程序员学习编程语言的语法写出来的代码 需要由解释器来运行,而Python主流的解释器就是CPython。所以大家的电脑上需要先安装上CPython解释器,然后才能运行自己编写的Python代码。 ...

    大家常说的Python是一门编程语言,程序员学习编程语言的语法写出来的代码 需要由解释器来运行,而Python主流的解释器就是CPython。所以大家的电脑上需要先安装上CPython解释器,然后才能运行自己编写的Python代码。

    打开官网:http://www.python.org,点击Downloads下载,如下图

    在这里插入图片描述

    下拉页面,选择对应版本:Python3.6.3,如下图
    在这里插入图片描述

    向下查找,找到Python 3.6.3 根据系统选择对应的安装包,如下图

    在这里插入图片描述

    根据当前系统的选择对用的,红色的是windows32位系统,绿色的是windows64系统位,目前大家的基本都是64位系统,所以一般选择 绿色框 标记的 x86-64 安装包。

    下载完成,如下图
    在这里插入图片描述

    下载完成后找到下载的目录,然后用鼠标左键双击

    安装
    在这里插入图片描述

    执行下一步

    在这里插入图片描述

    勾选安装

    在这里插入图片描述

    安装成功
    在这里插入图片描述

    展开全文
  • python附加篇cpython用法

    千次阅读 2020-08-31 22:53:04
    心得:刚换工作后,连续忙了2个多月,在这两个多月...先从cpython开始吧,cpython用作代码保护或者能够提升代码运行的效率。 一、Cpython简介 二、快速开始,配置文件以及编译 三、cpython中编码注意事项 四、其他 ...
  • 目前python主流的解释器CPython、JPython、IPython、PyPy、IronPython,但是用到最多的、生态最好的还是Cpython。 了解python底存的构造,比如List、Dict、Set、Tuple等他们到底是怎么实现的,而不是用它的时候两眼...
  • CPython与Cython

    千次阅读 2019-11-22 13:23:33
    CPython是解释器 当我们从Python官方网站下载并安装好Python 3.x后,我们就直接获得了一个官方版本的解释器:CPython。 这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。 ...
  • python、cpython、IPython、Jython区别

    万次阅读 多人点赞 2020-12-06 14:58:59
    Python是解释型语言,代码在执行时会一行一行地...当我们从Python官方网站下载并安装好Python 3.x后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行pyt
  • ubuntu18.04安装Cpython

    2021-01-21 21:19:06
    Cpython的安装,理论上是很简单的:pip3 install Cpython 即可安装成功,但安装pip3 install sklearn时出现: ModuleNotFoundError: Please install Cython with a version >= 0.28.5 in order to build a scikit...
  • Cpython pyc文件

    千次阅读 2019-05-05 14:50:00
    CPython是特指C语言实现的Python,就是原汁原味的Python。 之所以使用CPython这个词,是因为Python还有一些其它的实现,比如Jython,就是Java版的Python,还有烧脑的PyPy,使用Python再把Python实现了一遍。 如下是...
  • ImportError: No module named 'cpython'

    千次阅读 2019-12-27 21:05:55
    解决方法,在终端执行指令,等待下载即可 sudo pip install cpython
  • 比如下图中我的Console当前使用的版本是Python3.6.8的Cpython。 但是有的项目打开可能就不是这么简单常见的解释器版本,而是下图这样超级无敌罗里吧嗦 的 当然,你的Pycharm底部菜单没有Pytho...
  • Cython与CPython的区别

    千次阅读 2019-08-10 09:51:45
    Cython是一种混编的语言,可以让python调用C++容器,例如vector CPython是一种被广泛使用的python解释器,类似的解释器还有pypy,JPython等等
  • cpython编译

    千次阅读 2017-07-23 15:40:51
    https://github.com/python/cpython中间需要编译binutils-2.28 /configure –prefix=/opt/binutils –host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc Make -j4 Makecpython ./configure –prefix=/opt/...
  • cpython-36m-x86_64-linux-gnu.so undefined symbol玄学解决 xshell上使用python import一个机器学习的动态库,一直直接使用都正常,自从改了bashrc以添加一个新的模块以后,再import老是报错,出现一大堆undefined ...
  • Cpython和Jython的对比

    千次阅读 2018-08-02 19:09:14
    CPython 当我们从Python官方网站下载并安装好Python 3.x后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。 CPython是...
  • 其中使用c语言开发的叫做python,在于别的语言开发的python对比时为避免歧义通常称为CPython。 同样的,使用java开发的叫做JPython,使用.net开发的叫做IronPython。 而PyPy与CPython的不同在于,别的一些python...
  • 跑mmdetection的Demo,碰见这个错误: ImportError: XX/python3.7/site-packages/mmcv/_ext.cpython-37m-x86_64-linux-gnu.so: undefined symbol: _ZTIN3c1021AutogradMetaInterfaceE 参考github issue: ...
  • 我运行MMdetection时报的错,检查发现torch python cuda版本都对应版本检查,发现mmcv版本错误,我的mmcv 版本时1.4.3,最后根据cuda和torch版本重装 解决方法: pip uninstall mmcv-full ... ...
  • 主要原因是torchvision的版本与pytorch版本不兼容,选择和pytorch版本兼容的torchvision版本即可。 一、查看pytorch的版本:在python IDE中输入, import torch print(torch.__version__) ...
  • 当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。 由于整个Python语言从规范...CPython 当我们从Python官方网站下载并安装好......
  • 之前mmdetection可以很好的使用,突然出现种错误,找了好久,更新了mmcv-full的版本,才解决!
  • ERROR: ..._C.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN2at19UndefinedTensorImpl10_singletonE 解决: https://github.com/Tramac/awesome-semantic-segmentation-pytorch/issues/24 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,142
精华内容 27,656
关键字:

cpython