天天看點

【Python基礎】加密你的Python源碼順便再打個包如何?

成為一個智慧、快樂和富有的人。

——王宇航

【Python基礎】加密你的Python源碼順便再打個包如何?

導語

熟悉Python的小夥伴,有沒有考慮過:如何讓其他小夥伴(包括沒有Python基礎的小夥伴)更友善更快捷地使用你的Python程式,且不用擔心自己的核心程式洩漏出去呢?

首先想到的便是将程式源碼編譯成一個exe檔案,這樣所有小夥伴直接輕按兩下exe檔案便可以運作程式。但這便涉及到一個問題,這個操作隻是對源碼進行一個打包,類似于添加到壓縮檔案,使用者也可以輕易地将壓縮檔案解壓,到時候程式中的所有源碼便會暴露出來。

考慮到在C和C++這種編譯型語言中是将所寫的語言編譯成機器代碼,即二進制代碼,無法通過二進制代碼反編譯出源碼。Python是一門解釋型語言,但我們可以通過Cython庫将我們程式中的核心源碼程式設計成pyd格式的檔案,即Python環境中的DLL檔案,其是二進制編碼,同樣無法被反編譯。

由此,對于我們的Python源碼,我們可以先将其核心部分編譯成pyd格式進行加密,然後再将程式打包成一個exe檔案,友善使用者使用,讓你的Python程式更安全、更便捷。文章主要分為三個部分,希望這篇文章可以為有這方面需求的小夥伴提供一些幫助:

1.首先是建立一個Python小項目,簡單實作對檔案夾内圖檔進行批量重命名的操作,以此為示例,便于了解和後續操作的描述;

2.其次是對Python源碼加密操作的詳細講解;

3.最後講解了Python程式的打包操作,并展示最終實驗效果。

建立Python項目

初始化虛拟環境

在項目目錄下建立一個幹淨的Python虛拟環境,可以直接在PyCharm中操作,或者使用virtualenv venv指令建立環境,從下圖可以看到環境中隻包含pip和setuptools兩個庫。

【Python基礎】加密你的Python源碼順便再打個包如何?

完成Python項目

項目檔案夾下存放着5張待命名的圖檔和兩個python檔案,内容如下圖所示,rename.py中定義了重命名圖檔的函數my_rename,run_rename.py是項目的啟動檔案,通過調用my_rename函數完成圖檔的重命名。

【Python基礎】加密你的Python源碼順便再打個包如何?

rename.py

【Python基礎】加密你的Python源碼順便再打個包如何?

run_rename.py

【Python基礎】加密你的Python源碼順便再打個包如何?

Python源碼加密

安裝Cython

Cython全稱是C-Extensions for Python,可以看作是python的一個第三方庫,關于Cython的介紹,官網(https://cython.org/)上是這樣的,有興趣的小夥伴可以多去了解一下。安裝指令:pip install Cython

【Python基礎】加密你的Python源碼順便再打個包如何?

設定setup.py檔案

在項目檔案夾下建立一個setup.py檔案,檔案内容如下,setup中的name變量可以自己起一個名字,關鍵是修改ext_modules變量,将需要加密的python檔案名填入其中即可。

setup.py

【Python基礎】加密你的Python源碼順便再打個包如何?

運作setup.py檔案

在項目檔案夾的目錄下,打開指令終端,輸入指令python setup.py,運作setup.py檔案,也可在PyCharm中直接運作。運作結果如下圖所示,提示代碼已生成,同時也給出了生成檔案的路徑,通常情況下檔案生在虛拟環境的Lib\site-packages目錄下。

【Python基礎】加密你的Python源碼順便再打個包如何?

檢視生成檔案的目錄,新生成如下兩個檔案,pyd格式檔案便為對核心源碼進行加密後的檔案,其無法被反編譯。然後在項目檔案夾下生成rename.c和build檔案夾,可以直接删除,此時rename.py和setup.py也可以從項目目錄下移除,故目錄下隻剩run_rename.py和5張待重命名的圖檔。

【Python基礎】加密你的Python源碼順便再打個包如何?

Python程式打包

安裝Pyinstaller

Pyinstaller也是Python的第一個第三方庫,使用起來很友善,更多資訊詳見官網(https://pyinstaller.org/),安裝指令:pip install pyinstaller

生成spec檔案

運作如下指令便可在項目目錄下生成spec檔案,其中-F參數是指将程式打包為一個exe檔案,可以用文本編輯器打開并編輯spec檔案,根據不同的程式打包需求,對spec檔案中的參數進行對應的調整,後續我們會再推出一篇文章來詳細講述打包相關的操作。

pyi-makespec -F run_rename.py

生成exe檔案

運作指令:pyinstaller run_rename.spec,在目前目錄的生成build和dist檔案夾,在dist檔案夾下找到打包好的exe檔案,将其複制出來,剛剛生成的的檔案及目錄可以直接删除。

運作exe檔案

将生成的exe檔案放到圖檔的檔案夾中,輕按兩下運作exe檔案,彈出黑視窗後消失(也可在指令終端中輸入對應的exe檔案名運作,此時在終端上可以看到程式運作過程列印出來的資訊),發現圖檔的檔案名已經修改完成,OK,Python源碼的加密和打包功能實作。

【Python基礎】加密你的Python源碼順便再打個包如何?

編輯:莊桢