日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python转cpython_cpython的使用

發布時間:2024/3/24 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python转cpython_cpython的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這個的學習主要是因為在運行目標檢測的代碼時總是會出現下面的錯誤:

fromCython.Build import cythonize

ModuleNotFoundError: No module named'Cython'

----------------------------------------ERROR: Command erroredout with exit status 1: python setup.py egg_info Check the logs for full command output.

安裝:

pip install Cython

Collecting Cython

Downloading Cython-0.29.19-cp37-cp37m-macosx_10_9_x86_64.whl (1.9 MB)

所以打算學學這個模塊是怎么用的,以及用在哪里的

https://github.com/Sean16SYSU/CPython-Tutorial-zh

Python有時候太慢,如果手動編譯C或者是C++來寫#include的文件也比較麻煩。 CPython無疑是一個比較好的選擇。

改進的理由

每一行的計算量很少,因此python解釋器的開銷就會變的很重要。

數據的局部性原理:很可能是,當使用C的時候,更多的數據可以塞進CPU的cache中,因為Python的元素都是Object,而每個Object都是通過字典實現的,cache對這個數據不很友好。

項目

Hello World項目

第一個項目是Hello world。

創建一個文件helloworld.pyx,內容如下:

print("Hello world!")

保存后,創建setup.py文件,內容如下:

fromdistutils.core import setupfromCython.Build import cythonize

setup(

ext_modules= cythonize("helloworld.pyx")

)

保存后,命令行進入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.7gcc-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

運行完這個命令后,該目錄下就會生成三個文件:

build helloworld.pyx

helloworld.c setup.py

helloworld.cpython-37m-darwin.so

然后創建一個調用文件test.py,內容為:

import helloworld

運行返回:

i$ python test.py

Hello world!

.pyx文件:

pyx文件是python的c擴展文件,代碼要符合cython的規范,用什么編輯器寫都行。我在eric4上寫的,結果它默認用python解釋器來進行解釋,還提示有bug,“語法錯誤”。

上面的pyx文件還僅僅是源代碼文件,要想被python調用、要想運行,僅僅寫了源代碼還是不夠的(不像 Python 語言可直接解釋使用的 .py 文件,.pyx 文件必須先被編譯成 .c 文件,再編譯成 .pyd (Windows 平臺) 或 .so (Linux 平臺) 文件,才可作為模塊 import 導入使用)。具體來說,還要轉成.c或者.c++的文件,并且再進一步轉成.pyd文件。pyd文件才是可以直接使用的文件。為了達到上述目的,就要寫一個setup.py腳本,如上面那種

上述兩個步驟,相當于把某個python效率瓶頸模塊(這之前需要用profile工具來定位)用效率更高的代碼寫成了python的c擴展形式,接下來,就是要在python代碼中調用他們。test.py就是這個調用的腳本

Fibonacci Function項目

斐波那契數列:1, 1, 2, 3, 5,... 前兩位為1,之后每個數等于前面兩個數之和。

創建fib.pyx,內容如下:

from__future__ import print_function

def fib(n):

a, b= 0, 1

while b

print(b, end=' ')

a, b= b, a+b

print()

創建setup.py文件,內容如下:

fromdistutils.core import setupfromCython.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.py1 1 2 3 5 8 13 21 34 55 89

如果輸出兩者的時間:

(deeplearning) userdeMacBook-Pro:learning_2.0user$ python fib.pyx1 1 2 3 5 8 13 21 34 55 89

5.7220458984375e-05(deeplearning) userdeMacBook-Pro:learning_2.0user$ python test.py1 1 2 3 5 8 13 21 34 55 89

5.793571472167969e-05

發現速度并沒有很高的提升,很可能是操作本來就很簡單,數值也很小,沒什么優化的空間了。

Primes項目

給一個數值n,輸出前n個質數(list)。

寫到primes.pyx中:

def primes(intnb_primes):

cdefintn, i, len_p

cdefint p[1000]if nb_primes > 1000:

nb_primes= 1000len_p= 0n= 2

while len_p

else:

p[len_p]=n

len_p+= 1n+= 1result_as_list= [prime for prime inp[:len_p]]return result_as_list

setup.py:

fromdistutils.core import setupfromCython.Build import cythonize

setup(

ext_modules= cythonize("primes.pyx")

)

test.py:

import primes

import time

time0=time.time()

primes.primes(10000)

print(time.time()- time0)

返回使用時間:

0.0017080307006835938

View Code

prime.py原來:

def primes(nb_primes):

p=[]if nb_primes > 1000:

nb_primes= 1000n= 2

while len(p)

else:

p.append(n)

n+= 1result_as_list= [prime for prime inp]returnresult_as_listif __name__ == '__main__':

import time

time0=time.time()

primes(10000)

print(time.time()- time0)

使用時間:

0.030839204788208008

可見的確快了不少!!!!!!

總結

以上是生活随笔為你收集整理的python转cpython_cpython的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产在线久 | 中国老熟女重囗味hdxx | 伊人久久超碰 | 精品欧美一区二区久久久久 | 日韩h在线观看 | 特级西西人体444www高清 | 日韩福利电影在线 | 成人免费网站黄 | av不卡网 | 中文视频在线观看 | 国产高清一级片 | 最近中文字幕免费视频 | 182在线视频 | 国产视频在线免费观看 | 鸥美一级片 | 五月婷婷久久久 | 91精品国产91久久久久久吃药 | 成年人视频在线观看免费 | 爱综合网 | 日韩一区二区三区久久 | 欧美日韩人妻精品一区 | 久久久免费观看视频 | 葵司av电影 | 天堂中文在线免费观看 | www.尤物 | 超碰成人在线观看 | 欧美日韩免费在线观看 | 日韩中文字幕在线视频 | 亚洲最新视频 | 亚洲综合第一区 | 99久久99久久精品国产片桃花 | 国产一级免费看 | 国产男男gay网站 | 色女人天堂 | 天天干天天操天天爱 | 国产911视频 | 91网址在线观看 | 久久五月天综合 | 色丁香六月 | 疯狂做爰高潮videossex | 欧美淫视频 | 午夜影院在线观看免费 | 四虎影视最新网址 | 色戒av| 强行糟蹋人妻hd中文字幕 | 国产精品自拍片 | 91尤物视频 | 日本欧美一级 | 夜色一区二区 | 亚洲午夜小视频 | 日韩激情床戏 | 青青福利视频 | 日韩一区二区三区四区在线 | 成人一区二区免费视频 | 冈本视频在线观看 | 麻豆国产在线 | 欧美亚洲在线播放 | 亚洲综合热| 免费看黄在线观看 | 日韩欧美a级片 | 亚洲综合婷婷 | 妞干网这里只有精品 | 超碰在线日韩 | 欧美一级鲁丝片 | 每日av在线| 在线观看午夜 | 成人做爰视频www网站小优视频 | 在线观看亚洲av每日更新 | 91久久网 | 黄色大片一级片 | 中国少妇无码专区 | 亚洲美女操 | 大地资源影视在线播放观看高清视频 | 91蝌蚪少妇偷拍 | 97超碰免费在线观看 | www.狠狠 | 韩国av免费观看 | 亚洲人免费 | 天堂网久久 | 国产高清不卡av | 少妇熟女一区 | 国产草逼视频 | 麻豆亚洲一区 | 国产一区二区视频免费在线观看 | h片免费网站 | 偷拍第1页| 中文字幕一区二区三区精彩视频 | 女性裸体无遮挡胸 | 免费在线一区二区三区 | 欧美性猛交xx乱大交 | 在线免费黄色网址 | 爱爱综合 | 亚洲国产日韩欧美在线观看 | 国产91绿帽单男绿奴 | 中文字幕国产一区二区 | 成人入口 | 医生强烈淫药h调教小说视频 | 999午夜 | 色综合久久精品亚洲国产 |