【Python基础】加密你的Python源码顺便再打个包如何?
本篇為專屬于“交通科研Lab”志愿者系列推文活動,為大家帶來交通高校碩博們原創推文。為作者點贊,歡迎大家關注交流!!!
點擊藍字 關注我們
成為一個智慧、快樂和富有的人。
——王宇航
導語
熟悉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項目
項目文件夾下存放著5張待命名的圖片和兩個python文件,內容如下圖所示,rename.py中定義了重命名圖片的函數my_rename,run_rename.py是項目的啟動文件,通過調用my_rename函數完成圖片的重命名。
rename.py
run_rename.py
Python源碼加密
安裝Cython
Cython全稱是C-Extensions for Python,可以看作是python的一個第三方庫,關于Cython的介紹,官網(https://cython.org/)上是這樣的,有興趣的小伙伴可以多去了解一下。安裝命令:pip install Cython
設置setup.py文件
在項目文件夾下新建一個setup.py文件,文件內容如下,setup中的name變量可以自己起一個名字,關鍵是修改ext_modules變量,將需要加密的python文件名填入其中即可。
setup.py
運行setup.py文件
在項目文件夾的目錄下,打開命令終端,輸入命令python setup.py,運行setup.py文件,也可在PyCharm中直接運行。運行結果如下圖所示,提示代碼已生成,同時也給出了生成文件的路徑,通常情況下文件生在虛擬環境的Lib\site-packages目錄下。
查看生成文件的目錄,新生成如下兩個文件,pyd格式文件便為對核心源碼進行加密后的文件,其無法被反編譯。然后在項目文件夾下生成rename.c和build文件夾,可以直接刪除,此時rename.py和setup.py也可以從項目目錄下移除,故目錄下只剩run_rename.py和5張待重命名的圖片。
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源碼的加密和打包功能實現。
編輯:莊楨
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯獲取一折本站知識星球優惠券,復制鏈接直接打開:https://t.zsxq.com/662nyZF本站qq群1003271085。加入微信群請掃碼進群(如果是博士或者準備讀博士請說明):總結
以上是生活随笔為你收集整理的【Python基础】加密你的Python源码顺便再打个包如何?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python基础】Pandas参数设置
- 下一篇: 【算法基础】漫画:什么是 “跳表” ?