參考:
參考:
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...