在工做中,有時候咱們須要部署本身的Python代碼 或進行私有化部署時,尤爲如今都是經過docker鏡像部署,咱們並不但願別人可以看到本身的Python源程序。python
加密Python源代碼的方式,是將.py文件轉化爲.so文件,這樣加密的可靠性很是高,沒法破解,也就很好地保護了源代碼。linux
加密過程當中會產生不少多餘文件,加密後能夠刪除,我這裏用了腳本一步完成git
加密流程docker
項目文件加密
將加密的文件移至對應目錄下
刪除原文件和生成的附屬文件夾app
設備:Mac函數
項目:簡單測試項目工具
咱們須要在系統環境中安裝一些準備工具,包括python3-dev,gcc,Cython,其中Cython爲Python的第三方模塊。安裝的命令以下:測試
$ brew install gcc $ pip3 install cython linux上安裝 $ sudo apt install python3-dev gcc $ pip3 install cython
建立測試項目:ui
目錄以下:加密
簡單介紹文件:
入口函數main.py:
from origin import Hello t = Hello() t.say()
被加密的文件origin.py:
class Hello(): def say(self): print("hello world !")
加密的文件setup.py:
dirPath = "origin.py" # 一、文件加密 setup(ext_modules = cythonize([dirPath])) print("加密完成")
進入項目下,執行加密文件setup.py:python3 setup.py build_ext
多了一個文件:origin.c 和 一個文件夾:build
build裏就是咱們加密後的文件,手動將build/lib下的對應文件替換掉源文件便可,對應的.c文件也可刪除
注意:不一樣的系統產生的build的二級目錄不一樣,但加密後的文件都是lib開頭的目錄下,都是以.so結尾
處理後的項目目錄爲:
咱們發現原來的origin.py:被替換成了加密後的.so文件
測試項目是否還能正常運行:
項目加密完成!
一鍵完成
由於咱們不可能經過加密項目,而後一步步移動加密文件,而後刪除,再部署項目,那樣會致使整個項目代碼很亂,也不方便操做
加密文件也是Python代碼確定要用code完成整個過程了,
(加密 -- 源文件替換 -- 刪除.c和其餘附屬文件)
dirPath = "origin.py" filePath3 = "build/" # 一、文件加密 setup(ext_modules = cythonize([dirPath])) print("加密完成") # 二、將加密的文件移至對應目錄下 files_1 = os.listdir(filePath3) for files_1_temp in files_1: if "lib" in files_1_temp: files_1 = files_1_temp print(files_1) files_2 = os.listdir(filePath3 + files_1)[0] so_file = filePath3 + files_1+"/" + files_2 print(so_file) # 文件移動或拷貝 shutil.copy(so_file, "./") # 三、刪除原文件和生成的附屬文件夾 files2 = os.listdir("./") for file in files2: if file == dirPath or file.endswith(".c"): # 判斷文件是否存在 if (os.path.exists(file)): os.remove(file) print('移除後test 目錄下有文件:%s' % file) else: print("要刪除的文件不存在!") #刪除附屬文件夾 try: shutil.rmtree(filePath3) except Exception as ex: print("錯誤信息:"+str(ex))#提示:錯誤信息,目錄不是空的 print("刪除完成")
進入項目下,執行加密文件setup.py: python3 setup.py build_ext
Jenkins + Docker 部署
經過 Jenkins + Docker 部署的,那麼就要在部署過程當中進行加密處理
那麼經過Docker部署須要注意點:
一、須要安裝python3-dev,gcc,Cython
二、要先安裝Cython, 才能執行加密代碼
# 從拉取基礎鏡像 做爲builder FROM registry.cn-hangzhou.aliyuncs.com/ai_images/server-base2 AS builder COPY . /app WORKDIR /app RUN rm -rf ./.git # 注意這裏也有builder 會大大減小鏡像的大小且項目啓動速度也會加快 FROM registry.cn-hangzhou.aliyuncs.com/ai_images/server-base2 COPY --from=builder /app/ /app RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone EXPOSE 5009 RUN pip3 install -r ./requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ # 執行加密文件 RUN python3 setup.py build_ext CMD ["python3", "/app/main.py","run-server"]
小技巧分享:
docker部署時經過二次鏡像處理,會大大的減小鏡像的大小且加快項目啓動