將Python代碼編譯為pyd文件的兩種方法
方法1:使用Cython編譯python模塊為pyd
- 文件后綴名稱推薦使用pyx,py也可以;
- 需要創(chuàng)建setup.py編譯文件;
- 編譯為pyd后調用logging無法輸出行號、文件名、函數名;
安裝pip install setuptools Cython
創(chuàng)建一個hello.pyx文件,如果在pycharm中不能高亮顯示則打開【文件】【設置】【編輯器】【文件類型】【python】,添加一個*.pyx;

def fun1():
print("Hello from plugin function fun1!")
class Hello:
def __init__(self):
pass
def fun(self):
print("Hello from plugin class Hello!")
創(chuàng)建一個setup.py文件,用于將hello.pyx編譯為pyd;
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("hello.pyx"),
zip_safe=False,
)
運行 python setup.py build_ext --inplace 來編譯生成擴展模塊。
靜態(tài)導入模塊
from plugins.hello import * fun1() h = Hello() h.fun()
動態(tài)導入模塊(可實現(xiàn)插件)
import importlib
# 動態(tài)導入 plugins.hello 模塊
module = importlib.import_module("plugins.hello")
# 或者
sys.path.insert(0, plugin_path) # 添加插件目錄到系統(tǒng)路徑,以便可以找得到插件
module = importlib.import_module("hello")
# 從模塊中獲取 fun1 函數并調用
fun1 = getattr(module, "fun1")
fun1()
# 從模塊中獲取 Hello 類并實例化,然后調用其 fun 方法
Hello = getattr(module, "Hello")
h = Hello()
h.fun()
方法2:使用nuitka打包現(xiàn)有py代碼
- 打包為pyd后調用logging可以輸出文件名、行號等信息,保持了Python的調用棧信息;
- 打包速度較慢、生成文件體積大;
- 安裝
pip install nuitka - 使用命令
nuitka --module your_module.py編譯為pyd;(編譯單文件) - 使用命令
nuitka --module --include-package=src src將src模塊編譯為pyd(一個包)- 確保模塊有
__init__.py文件,這樣 Python 會把它當作包處理; - –module 表示生成 .pyd 文件;
- –include-package=src 指定要包含的包(假設你的包名為 src);
- src 是要打包的包目錄;
- 確保模塊有
以上就是將Python代碼編譯為pyd文件的兩種方法的詳細內容,更多關于Python代碼編譯為pyd文件的資料請關注腳本之家其它相關文章!
相關文章
python tkinter圖形界面代碼統(tǒng)計工具(更新)
這篇文章主要為大家詳細介紹了python tkinter圖形界面代碼統(tǒng)計工具,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09
完美解決TensorFlow和Keras大數據量內存溢出的問題
這篇文章主要介紹了完美解決TensorFlow和Keras大數據量內存溢出的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
用Python展示動態(tài)規(guī)則法用以解決重疊子問題的示例
這篇文章主要介紹了用Python展示動態(tài)規(guī)則法用以解決重疊子問題的一個棋盤游戲的示例,動態(tài)規(guī)劃常常適用于有重疊子問題和最優(yōu)子結構性質的問題,且耗時間往往遠少于樸素解法,需要的朋友可以參考下2015-04-04

