精华内容
下载资源
问答
  • cpython

    2020-12-31 05:50:04
    <div><h3>Description of Problem, Request, ...<ul><li>Package Name/Version: <strong>cpython/3.6.4</strong></li> <p>Thanks for the support!</p><p>该提问来源于开源项目:bincrafters/community</p></div>
  • CPython

    2021-01-31 23:19:21
    CPython是用C语言编写的Python解释器,也是最广为使用的Python解释器。 一般在没有特殊说明时,说Python指的就是这个CPython解释器。

    CPython是用C语言编写的Python解释器,也是最广为使用的Python解释器。

    一般在没有特殊说明时,说Python指的就是这个CPython解释器。

     

    展开全文
  • Cpython

    2018-11-09 14:01:32
    先编译在运行 from distutils.core import setup, Extension from Cython.Build import cythonize import numpy setup(ext_modules = cythonize(Extension( ...cdef np.ndarray[np.float32_t, ...cpython语法  

    先编译在运行

    from distutils.core import setup, Extension
    from Cython.Build import cythonize
    import numpy
    setup(ext_modules = cythonize(Extension(
        'dot_cython',
        sources=['dot_cython.pyx'],
        language='c',
        include_dirs=[numpy.get_include()],
        library_dirs=[],
        libraries=[],
        extra_compile_args=[],
        extra_link_args=[]
    )))

    # dot_cython.pyx
    import numpy as np
    cimport numpy as np
    cimport cython
    
    @cython.boundscheck(False)
    @cython.wraparound(False)
    cdef np.ndarray[np.float32_t, ndim=2] _naive_dot(np.ndarray[np.float32_t, ndim=2] a, np.ndarray[np.float32_t, ndim=2] b):
        cdef np.ndarray[np.float32_t, ndim=2] c
        cdef int n, p, m
        cdef np.float32_t s
        if a.shape[1] != b.shape[0]:
            raise ValueError('shape not matched')
        n, p, m = a.shape[0], a.shape[1], b.shape[1]
        c = np.zeros((n, m), dtype=np.float32)
        for i in xrange(n):
            for j in xrange(m):
                s = 0
                for k in xrange(p):
                    s += a[i, k] * b[k, j]
                c[i, j] = s
        return c
    
    def naive_dot(a, b):
        return _naive_dot(a, b)
    python setup.py build_ext --inplace

    from distutils.core import setup

    from distutils.extension import Extension

    from Cython.Build import cythonize

     

    setup(

      name = 'helloworld',

      ext_modules=cythonize([

        Extension("helloworld", ["helloworld.pyx"]),

        ]),

    )

     

     

    编译:

    python Setup.py build

    安装:

    python Setup.py install

    安装后,会将在build/lib.???目录下生成的helloworld.pyd拷贝到Lib/site-packages

    测试:

    >>>import helloworld

    >>>helloworld.SayHello()

    hello,world

    4.2 其次就是可以自己写Makefile进行编译

    写Makefile的好处就是可以知道编译的实质:

    下面是用于Windows下编译的Makefile,Makefile内容如下:

    ALL :helloworld.pyd

    helloworld.c : helloworld.pyx

         cython -o helloworld.c helloworld.pyx

    helloworld.obj :helloworld.c

         cl -c -Id:\python27\include helloworld.c

    helloworld.pyd :helloworld.obj

         link /DLL /LIBPATH:d:\python27\libshelloworld.obj /OUT:helloworld.pyd

     

    执行命令:

    set PATH=D:\Python27\Scripts;%PATH%

    nmake

     

    进行编译,会在根目录下生成helloworld.pyd

    linux下的Makefile和Windows下的类似,只是编译器不同而己,另外,生成的文件名为:helloworld.so,而不是helloworld.pyd

    cpython语法

     

    展开全文
  • CPython_notes:Cpython原始阅读笔记
  • 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

    万次阅读 多人点赞 2018-02-27 16:00:01
    CPython是特指C语言实现的Python,就是原汁原味的Python。 之所以使用CPython这个词,是因为Python还有一些其它的实现,比如Jython,就是Java版的Python,还有烧脑的PyPy,使用Python再把Python实现了一遍。 如下...

    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的字节码。

    展开全文
  • Cpython内部 如果需要在更新时收到通知,请观看此仓库 这个存储库是我关于源代码的注释/博客 试图说明cpython实现的每个细节 # based on version 3.8.0a0 cd cpython git reset --hard ab54b9a130c88f708077c2ef6c...
  • 更快的CPython 快五倍 我们希望在接下来的四个发行版中将CPython的速度提高5倍。 请参阅以了解如何完成此操作。 付钱 要使CPython快这个数量,将需要资金。 依靠核心开发人员的商誉和业余时间是不够的。 请参阅,...
  • CPython 2.7.10

    2020-12-04 11:45:15
    <div><p>Added CPython 2.7.10.</p><p>该提问来源于开源项目:saghul/pythonz</p></div>
  • Bump CPython

    2020-12-01 22:47:27
    - The update to CPython 3.6 rendered the usage of <code>enum34</code> invalid (it does not and will never support CPython 3.6). Removal of <code>enum34</code> required updating the Python Azure libs, ...
  • cpython发现

    2019-12-17 16:36:12
    当我们从Python官方网站下载并安装好Python 后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。 CPython是使用最广的...
  • CPython介绍

    2020-08-27 17:51:15
    CPython CPython是特指C语言实现的Python,就是原汁原味的Python。 之所以使用CPython这个词,是因为Python还有一些其它的实现,比如Jython,就是Java版的Python,还有烧脑的PyPy,使用Python再把Python实现了一遍...
  • CPython简介

    2020-04-11 11:10:35
    CPython 我们平时所说的Python,一般都是指CPythonCPython是标准的,而且最常用的python实现方式,还有其他实现方式,例如Jython(Java), IronPython(.NET), PyPy(Python)。 代码有两种常见的执行方式,一种是编译...
  • cpython-源码

    2021-03-30 23:20:53
    有关对CPython开发做出贡献的更完整的说明,请参阅《 。 可安装的Python套件以及有关使用Python的信息可在。 在Unix,Linux,BSD,macOS和Cygwin上: ./configure make make test sudo make install 这会将Python...
  • 有关加快CPython速度的注意事项 在线阅读: : 编译为HTML:制作html Sphinx构建的文档
  • Cpython Internals 简体中文 한국어 Watch this repo if you need to be notified when there's update This repository is my notes/blog for cpython source code Trying to illustrate every detail of ...
  • 有助于CPython项目的教程。 本教程的设计和目标 最终目标是培训贡献者,以将他们提升为CPython核心开发人员。 这是长期目标。 短期目标是填补当前devguide中“编译/安装python”和“恭喜!您现在是CPython核心开发...
  • 用于CPython版本的RSS feed (加上) 版权所有(c)Brian Skinn 2021 许可证:MIT许可证。 有关完整的许可条款,请参阅 。
  • python底层代码Cpython

    2020-10-21 16:46:55
    python底层代码由C语言编写,这是Cpython即python底层代码,从github上下载来的,希望大家一起学习进步。
  • python、cpython、IPython、Jython区别

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

    2020-12-25 17:09:13
    s important for CPython to use this API itself for implementing external modules (e.g. <code>functools</code> or <code>json). I'm regularly annoyed that the designers of the C API in CPython are ...
  • Cpython unit tests

    2021-01-07 13:14:28
    <div><p>Create PR to merge the cpython unit test feature branch back to master. <p>Much work to do here!</p><p>该提问来源于开源项目:skulpt/skulpt</p></div>
  • CPython与Cython

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

    2020-12-31 09:07:58
    I failed to test Cpython engine after I installed Cpython according to the video. I don't know how to deal with this problem. I hope you can help me. <p><img alt="Open report error" src=...
  • CPython 3.9 wheels

    2021-01-07 04:03:04
    Could you please release CPython 3.9 manylinux wheels on PyPI? <p>Python 3.9.0 final was released this week: https://www.python.org/downloads/release/python-390/</p> <p>Thank You.</p><p>该提问来源于...
  • Integration into CPython

    2020-12-03 03:18:13
    s excited to see this integrated into CPython 3.9. Some of his suggestions: <ul><li>Test on the 100 most popular PyPI packages (in addition to stdlib), or possibly on all of PyPI (1TB)</li><li>Make it...
  • 这是使用标准的Python实现(CPython)来完成的,该实现通过emscripten进行编译以生成Web Assembly库。 这种方法的好处是: 这样就可以访问完整的Python实现。 Wasm可以非常快,因此解释器仍然非常有用。 它支持...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,798
精华内容 4,319
关键字:

cpython

python 订阅