在工做中,有时候咱们须要部署本身的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部署时经过二次镜像处理,会大大的减小镜像的大小且加快项目启动