<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
為了避免程式碼洩露的風險,我們往往需要對程式碼進行加密,PyArmor
是一個用於加密和保護 Python
指令碼的工具。它能夠在執行時刻保護 Python
指令碼的二進位制程式碼不被洩露,設定加密後Python
原始碼的有效期限,綁 定加密後的Python
原始碼到硬碟、網路卡等硬體裝置。
pip install pyarmor
更新到最新版本:
pip install --upgrade pyarmor
a) 單個包,只有單級目錄
使用命令obfuscate
來加密 python 指令碼。在最簡單的情況下,最常用的一種情況是切換到主函數指令碼algorithm.py
所在的路徑,然後執行:
pyarmor obfuscate algorithm.py
PyArmor 會加密 algorithm.py
和相同目錄下面的所有 *.py 檔案
:
dist
algorithm.py
儲存在輸出目錄 dist
*.py
檔案,儲存到輸出目錄 dist
dist
b) 若有多個演演算法包、多級目錄
預設情況下,只有和主指令碼相同目錄的其他 *.py
會被同時加密。如果想遞迴加密 子目錄下的所有 *.py
檔案,使用下面的命令:
pyarmor obfuscate --recursive algorithm.py
注意:只能加密.py
檔案,如果演演算法需要呼叫.csv
,.json
檔案,直接拷貝到dist
資料夾對應的包裡就可以了
執行加密指令碼不需要安裝pyarmo
cd dist
python algorithm.py
執行到這一步已經可以釋出加密指令碼了,釋出加密指令碼只需要把輸出路徑的所有dist
檔案拷貝即可。
由於pyarmo
加密的指令碼對執行環境比較敏感,因此我們最好把整個演演算法打包成映象,在啟動容器的時候進行加密,並刪除所有的未加密檔案,留下dist
檔案
注:上文也說過,pyarmo只能對
.py
檔案加密,對於.csv
,.json
檔案是無法加密的,自然在生成的dist
包裡也沒有非.py
字尾的檔案,因此我們需要將.csv
等檔案移入到dist
裡,不然執行dist
裡的演演算法時會報錯。
由於我本地是windows
系統,所以生成.dll
字尾檔案,直接把dist製作成映象會報錯,因為容器執行需要.so
檔案,因此考慮在容器中執行時加密,生成.so
,再自動移除未加密文鍵,只留下dist
及所需的非.py
字尾檔案,其實也可以用linux
系統直接本地執行生成dist
,但是不要忘記將非.py
字尾的檔案及資料夾複製進去。
下面將以myprocessor
的演演算法包為例,講述整個流程:
可以看出,裡面是多個演演算法包互相呼叫的,且有較多的非
.py
檔案
FROM python:3.6 # 匯入python3.6基礎環境 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai'>/etc/timezone # 同步系統時間 COPY ./ ./app/ # 將演演算法裡面的所有檔案和資料夾複製到映象裡 WORKDIR /app/ # 設定映象裡的app為主資料夾 RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 將演演算法需要的包在映象中進行安裝 RUN pyarmor obfuscate --recursive myprocessor.py # 對所有演演算法遞迴加密 RUN ls # 顯示app內的所有檔案 CMD ["python3","/app/dist/myprocessor.py"] # 執行dist內的加密後的主函數
# 這裡就是執行我的演演算法依賴的模組,pyarmor==7.4.2一定要加,其他的根據自己的演演算法依賴新增 pyarmor==7.4.2 pandas == 1.1.5 numpy == 1.19.5 requests == 2.25.1
# -*- coding: utf-8 -*- import shutil import os class File_lock(): def __init__(self): self.root_path = os.getcwd() # 當前工作路徑 def remove_and_del_unsecret_dir_f(self): '''移除未加密的py和pyc檔案,複製非py,pyc檔案到dist''' for root, dir, files in os.walk(self.root_path): if "dist" not in root: for file in files: if os.path.splitext(file)[-1] in ['.py', '.pyc']: # 刪除所有未加密的.py和.pyc檔案 os.remove(os.path.join(root, file)) else: # 由於非py檔案無法加密,因此將非py檔案移動到同名資料夾下,若找不到同名資料夾就建立同名資料夾 if root == self.root_path: dist_same_die_path = os.path.join(self.root_path, 'dist') else: dist_same_die_path = os.path.join(self.root_path, 'dist', os.path.basename(root)) if not os.path.exists(dist_same_die_path): os.mkdir(dist_same_die_path) shutil.move(os.path.join(root, file), dist_same_die_path) temp_list = os.listdir() # 移除dist外的所有空資料夾 temp_list.remove('dist') for i in temp_list: os.rmdir(i) def lock_by_pyarmor(self): # print("當前工作路徑:",self.root_path) # print("os.listdir", os.listdir()) if (not os.path.exists(os.path.join(self.root_path, "dist"))): # 若dist不存在 os.system("pyarmor obfuscate --recursive myprocessor.py") # 加密 self.remove_and_del_unsecret_dir_f() else: # print("加密後資料夾:",os.listdir()) self.remove_and_del_unsecret_dir_f() # print("移除未加密檔案後:",os.listdir())
from lock_by_pyarmor import File_lock def call(arg, model, *args, **kwargs): lockf = File_lock() lockf.lock_by_pyarmor() from deviation_algothrim.get_deviation import Deviation from loss_power.get_loss_power import GetPower pass if __name__ == "__main__": print(call(arg=None, model=None))
注意:從其他包裡匯入需要的內容,需要放到
lockf.lock_by_pyarmor()
之後,不然,還沒有完全構建成dist檔案,可能會呼叫報錯。
docker build _t imag1 .建立完映象後,app內目錄為:
可以看到app內只剩下了dist檔案。
最後需要將啟動的容器重新打包成映象,並行布到harbor上:docker commit 2293ee92f3ca7 new_image,丟棄原本的映象。因為原本映象中是有未加密檔案的,並且可以存取 。
可以將容器裡的加密檔案匯出到本地D槽: docker cp bf5f2e815b64:/app D:/
ps: 如有問題,或者lock_by_pyarmor.py有更好的實現方法,希望可以指正。
到此這篇關於python演演算法加密 pyarmor與docker的文章就介紹到這了,更多相關python 演演算法加密內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45