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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Python生成pyd文件

發布時間:2023/12/13 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 Python生成pyd文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python的腳本文件是開源的,量化策略的安全性沒有保障。因此需要保護源碼。那么要對Python代碼進行混淆、加密保護。

混淆代碼,我準備使用pyminifier。而加密處理,就比較麻煩。

Python有py、pyc、pyw、pyo、pyd等文件格式。

其中,pyc是二進制文件。但很容易被反編譯。

pyw也不行,只是隱藏命令行界面而已,可以作為入口腳本。

pyo和pyc差不多,也容易被反編譯。

最后剩下pyd格式。pyd格式是D語言(C/C++綜合進化版本)生成的二進制文件,實際也會是dll文件。該文件目前位置沒找到可以被反編譯的消息,只能被反匯編。Sublime text編輯器也是使用該格式。

Python的py文件生成pyd文件步驟如下。

1、安裝Cython

可以使用pip命令安裝Cython。

pipinstallcython

2、處理vcvarsall.bat

若不處理,可能會出現“Unable to find vcvarsall.bat”錯誤。

安裝Cython之后,還需要指定vcvarsall.bat的位置。

vcvarsall.bat是VC編譯Python環境的文件之一。而vcvarsall.bat需要安裝VC For Python2.7。我的Python是2.7,剛好可以使用這個。至于3.x版本不知道微軟更新了沒有。

下載地址:VCForPython27.msi

安裝成功之后,再修改設置。讓Cython可以找到vcarsall.bat。此處有兩種方案。

方案1:修改Python安裝目錄的文件設置

方案2:修改注冊表

我采用方案1,親測可用。方案2未測試,看似可用。

3、創建工作目錄并生成pyd文件

這里有一個坑。程序所在的目錄路徑不能包含中文文字。所以我在E盤下創建一個test文件夾,用于放置要處理的python文件。

簡單寫了一個測試文件(命名為test.py):

#coding:utf-8
defhello():
print("Helloworld")
input("<pressENTERtoquit>")

在該目錄下,再新建一個py文件(命名為setup.py):

fromdistutils.coreimportsetup
fromCython.Buildimportcythonize

setup(
name='Helloworldapp',
ext_modules=cythonize("test.py"),
)

接著,再打開cmd,跳到該目錄并執行如下命令:

pythonsetup.pybuild_ext--inplace

最終生成pyd文件

其中,build是生成過程使用到的臨時文件。test.c也是臨時文件,可以打開看看傳說中的D語言代碼。

test.pyd是我們所需的文件。

pyd文件可以像平常一樣使用import引入模塊的方式正常使用。

后來,我嘗試使用py2exe打包pyd文件。還需要創建一個入口腳本(命名為index.py):

importtest

if__name__=="__main__":
test.hello()

為了方便打包,我重新創建一個目錄。把index.py和test.pyd復制到該目錄。

如何安裝和使用py2exe這里我就不說了,自行百度一下。

分別用test.pyd和未處理的test.py打包效果如下:

1)用test.pyd

直接可以在index.exe對應的位置找到該文件。

2)用test.py

在該目錄下沒有test.py文件。該文件在library.zip中。

測試結果,用py2exe可以正常使用pyd文件。

ps:若用Cython出現如下錯誤,說明文件的編號和python腳本設置 #coding設置的編碼不一致。保存一致編碼即可解決該問題。

Decoding error, missing or incorrect coding=<encoding-name> at top of source (cannot decode with encoding 'utf8': invalid start byte)

總結

以上是生活随笔為你收集整理的Python生成pyd文件的全部內容,希望文章能夠幫你解決所遇到的問題。

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