不要再裸奔了。你的项目代码安全吗?如果你不加密,它就会出局。我不想让别人看到我的Python源程序。Python源码的加密方式是将.py文件转成.so文件,这样加密的可靠性很高,无法破解,很好的保护了源码。加密过程中会产生很多冗余文件,加密后可以删除。我使用脚本一步完成加密过程。对工程文件进行加密,将加密后的文件移动到对应的目录下。删除原文件和生成的辅助文件夹。设备:Mac项目:Simple为了测试项目,我们需要在系统环境中安装一些准备工具,包括python3-dev、gcc、Cython,其中Cython是Python的第三方模块。安装命令如下:$brewinstallgcc$pip3installcython在linux上安装$sudoaptinstallpython3-devgcc$pip3installcython创建一个测试工程:目录如下:简介文件:入口函数main。py:fromoriginimportHellot=Hello()t.say()加密文件origin.py:classHello():defsay(self):print("helloworld!")加密文件setup.py:dirPath="origin.py"#1,文件加密setup(ext_modules=cythonize([dirPath]))print("加密完成")进入项目,执行加密文件setup.py:python3setup.pybuild_ext多了一个文件:origin。c和一个文件夹:在buildbuild中是我们加密后的文件,可以手动将build/lib下的对应文件替换为源文件,对应的.c文件也可以删除注意:不同系统生成的build二级目录为不一样,但是加密后的文件都在lib开头的目录下,都是.so结尾的处理后的项目目录为:我们发现原来的origin.py:被替换为加密后的.so文件测试项目是否还能正常运行:projectEncryptioncomplete!一键完成因为我们不可能通过加密项目,然后一步步移动加密文件,然后删除,再部署项目,这样会导致整个项目代码乱七八糟,不方便操作加密文件。同样是Python代码,整个过程必须用代码完成现在,(加密--源文件替换--删除.c等附属文件)dirPath="origin.py"filePath3="build/"#1,fileencryptionsetup(ext_modules=cythonize([dirPath]))print("Encryptioncomplete")#2.将加密文件移动到对应目录files_1=os.listdir(filePath3)forfiles_1_tempinfiles_1:if"lib"infiles_1_temp:files_1=files_1_tempprint(files_1)files_2=os.listdir(filePath3+files_1)[0]so_file=filePath3+files_1+"/"+files_2print(so_file)#文件移动或复制shutil.copy(so_file,"./")#3.删除原文件和生成的子文件夹files2=os.listdir("./")forfileinfiles2:iffile==dirPathorfile.endswith(".c"):#判断文件是否存在if(os.path.exists(file)):os.remove(file)print('移除后test目录下还有文件:%s'%file)else:print("要删除的文件不存在!")#删除附属文件夹try:shutil.rmtree(filePath3)exceptExceptionasex:print("错误信息:"+str(ex))#提示:错误信息,目录不为空print("删除完成")Enter项目并执行加密文件setup.py:python3setup.pybuild_extJenkins+DockerDeployment通过Jenkins+Docker部署,那么在部署过程中必须进行加密处理。通过Docker部署需要注意的地方:1.需要先安装python3-dev、gcc、Cython2,并先安装Cython才能执行加密代码#PullthebaseimageasbuilderFROMregistry.cn-hangzhou.aliyuncs.com/ai_images/server-base2ASbuilderCOPY./appWORKDIR/appRUNrm-rf./.git#注意这里还有一个builder会大大减小镜像的大小,加快项目启动FROMregistry.cn-hangzhou.aliyuncs。com/ai_images/server-base2COPY--from=builder/app//appRUNln-sf/usr/share/zoneinfo/Asia/Shanghai/etc/localtimeRUNecho'Asia/Shanghai'>/etc/timezoneEXPOSE5009RUNpip3install-r./requirements.txt-ihttps://mirrors.aliyun.com/pypi/simple/#执行加密文件RUNpython3setup.pybuild_extCMD["python3","/app/main.py","run-server"]技巧分享:docker部署通过二次图像处理,图像尺寸大大缩小,项目启动速度加快
