pyx檔案 生成pyd 檔案用於 cython呼叫

2021-07-26 04:11:09 字數 1449 閱讀 6790

參考:

參考:    

pyx檔案是python的c擴充套件檔案,**要符合cython的規範,用什麼編輯器寫都行。我在eric4上寫的,結果它預設用python直譯器來進行解釋,還提示有bug,「語法錯誤」。

上面的pyx檔案還僅僅是源**檔案,要想被python呼叫、要想執行,僅僅寫了源**還是不夠的。具體來說,還要轉成.c或者.c++的檔案,並且再進一步轉成.pyd檔案。pyd檔案才是可以直接使用的檔案。為了達到上述目的,就要寫乙個setup.py指令碼,如下:

#!/usr/bin/python

#python version: 2.7.3

#filename: setuptestomp.py

# run as:

# python setup.py build_ext --inplace

import sys

sys.path.insert(0, "..")

from distutils.core import setup

from distutils.extension import extension

from cython.build import cythonize

from cython.distutils import build_ext

# ext_module = cythonize("testomp.pyx")

ext_module = extension(

"testomp",

["testomp.pyx"],

extra_compile_args=["/openmp"],

extra_link_args=["/openmp"],

)setup(

cmdclass = ,

ext_modules = [ext_module],

)

這個完全是乙個python指令碼,可以在python直譯器下面執行。在控制台下,執行如下命令『python setup.py build_ext --inplace』,就生成了testomp.pyd檔案。當然,同時還有一些雜七雜八的檔案,如『build』目錄下面的『lib』檔案。這都提示著,這是在windows vistual studio環境下。在linux+gcc環境下,就要生成.so檔案了,而且「/openmp」的選項就要寫成「-fopenmp」

寫testomp.py

檔案上述兩個步驟,相當於把某個python效率瓶頸模組(這之前需要用profile工具來定位)用效率更高的**寫成了python的c擴充套件形式,接下來,就是要在python**中呼叫他們。testomp.py就是這個呼叫的指令碼,如下:

from testomp import test 

test()

這個就很容易了,import並且呼叫。在控制台下,輸入「python testomp.py」,執行。

使用C 建立Pyd檔案擴充套件Python模組

1 需要說明的是pyd檔案其實就是dll,為了python能正常呼叫,這個dll規定了匯出函式的一些規則。下面 簡單演示使用c 建立乙個函式,並使用python呼叫該模組。include include 需要繫結的方法 static pyobject printhello pyobject self...

用於生成DLL檔案的def檔案的規範寫法

def檔案介紹 模組定義 def 檔案為鏈結器提供有關被鏈結程式的匯出 屬性及其他方面的 資訊。使用def檔案來輸出函式的乙個最主要目的就是 將編譯器生成的函式修飾名去掉,用更加自然的 容易理解的 容易記憶的名字,而不是修飾名來輸出函式。這裡的名字可以不是函式名,這時須使用def檔案的name格式。...

從MAC上生成pem檔案用於推送

記錄以下內容主要用於時間久了,自己也會忘了,又要重新查詢。4.開啟終端將p12檔案轉換為pem格式 openssl pkcs12 clcerts nokeys out apns cert.pem in apns cert.p12 openssl pkcs12 nocerts out apns key...