1、将DEBUG设置为False
必须这样子做。
2、对python代码进行编译
这里使用Cython工具将.py文件编译成.so文件(在Windos系统中的是.pyd文件)。
(1)成功部署
先将整个项目成功部署到服务器上运行。
(2)安装Cython工具
pip install Cython
(3)编写setup.py文件
可根据自己的需求编写编译逻辑。下面是我自己编写的案例:
from pathlib import Path
from setuptools import setup
from Cython.Build import cythonize
import os
# 执行命令:python setup.py build_ext --inplace
filepaths = []
BASE_DIR = Path(__file__).resolve().parent
print(BASE_DIR)
# 忽略的文件
ignore_files = ["__init__.py", "apps/cms/views/comment.py"]
def is_ignore(fullpath):
ignore = False
for name in ignore_files:
if str(fullpath).endswith(name):
ignore = True
break
return ignore
def encrypt_py(path):
'''
加密路径下除了__init__.py的所有.py文件
:param path:路径
:return:
'''
for root, dirs, files in os.walk(path):
for file in files:
fullpath = os.path.join(root, file)
if os.path.splitext(fullpath)[1] == ".py":
if not is_ignore(fullpath):
filepaths.append(fullpath)
7
if __name__ == '__main__' and not str(BASE_DIR).startswith("D:"):
encrypt_py(os.path.join(BASE_DIR, "tools"))
encrypt_py(os.path.join(BASE_DIR, "apps"))
encrypt_py(os.path.join(BASE_DIR, "apps_extra"))
error_list = []
remove_list = []
remove_error_list = []
for f in filepaths:
try:
setup(ext_modules=cythonize(f))
try:
os.remove(f)
remove_list.append(f)
except:
remove_error_list.append(f)
_f = os.path.splitext(f)[0] + '.c'
try:
os.remove(_f)
remove_list.append(_f)
except:
remove_error_list.append(_f)
except:
error_list.append(f)
print("-------------------收集到的文件列表------------------------")
print(filepaths)
print("-------------------编译错误的文件列表------------------------")
print(error_list)
print("-------------------成功删除的文件列表------------------------")
print(remove_list)
print("-------------------删除失败的文件列表------------------------")
print(remove_error_list)
注意:此案例会对tools、apps、apps_extra目录下的所有py文件进行编译(不编译init,py文件,否在会报错),编译成功后会直接删除py文件和编译中间文件.c。使用此案例进行编译请注意先备份项目。
(4)执行编译命令
进入到项目的python运行环境下执行下面命令。
python setup.py build_ext --inplace
编译成功后可将项目下生成的build文件夹删除。
编译后的项目:
最后
此方案仅为个人见解,若谁有更好的解决方案可在下方评论区一起交流。
方案会不断的进行优化,最新解决方案可到我的个人博客网站(www.mtools.club)中预览。