當我們需要分享開發完成的自動化程式給其他人使用時,為了保護開發者的智慧財產權,我們會想要將程式加密起來。在IronPython當中,我們可以透過編譯dll的方式,將原本為文字格式的Python加密。接下來以一個簡單的範例介紹如何執行程式加密。
首先準備兩個Python檔案:main.py及mymodule.py,兩個檔案放在d:/demo目錄底下。main.py的程式碼:
import os
os.chdir(os.path.dirname(os.path.realpath(__file__)))
import mymodule
x = mymodule.myadd(1,3)
AddWarningMessage(str(x))
主程式只包含簡單功能的代碼,像是切換工作路徑,匯入模組,呼叫模組的函式完成計算,輸出結果到訊息視窗等等。至於重要的資料及演算法代碼則是放在mymodule.py,本範例只有一個函式:
def myadd(x, y):
return x+y
在AEDT執行main.py,訊息視窗會顯示答案,如圖一:
(圖一) 程式正確執行 |
功能測試無誤之後,接下來編寫一個批次檔compile.bat來針對mymodule.py執行dll編譯的工作:
PATH=%PATH%;C:\Program Files\AnsysEM\AnsysEM20.2\Win64\common\IronPython
ipy64 "C:/Program Files/AnsysEM/AnsysEM20.2/Win64/common/IronPython/Tools/Scripts/pyc.py" "D:/demo/mymodule.py"
pause
在windows命令列視窗執行compile.bat,如果編譯成功會出現如圖二的訊息,此時目錄下會出現mymodule.dll檔案。
(圖二) 成功編譯.dll訊息 |
最後在主程式碼當中加上clr.AddReferenceToFileAndPath("mymodule.dll")指令來鏈結.dll檔,程式碼如下。
import os
os.chdir(os.path.dirname(os.path.realpath(__file__)))
import clr
clr.AddReferenceToFileAndPath("mymodule.dll")
import mymodule
x = mymodule.myadd(1,3)
AddWarningMessage(str(x))
從d:/demo目錄底下移除mymodule.py檔之後,執行main.py。如果可以正常執行,即代表鏈結無誤。接下來只要提供main.py以及mymodule.dll給需要的人就可以了。
沒有留言:
張貼留言