常用的代码保护不外乎下面几种方法:
发行 .pyc 文件 代码混淆 使用 py2exe 使用 Cython
django发布的需要以服务运行,通过其他的几种方法来实现保护,都不太现实。所以发布可以通过cython的方式实现。
1. 安装cython
pip3 install cython
2.在项目目录创建setup.py 编辑内容如下,其中“app/file1.py”是你所要打包的py文件名,这儿需要把app下所有的py文件都添加进来(当然也可以添加部分)
from distutils.core import setup from Cython.Build import cythonize fileSet = set() fileSet.add("UserBase/models.py") fileSet.add("UserBase/views.py") setup( ext_modules=cythonize(fileSet) )
3.运行setup.py
python3 setup.py build_ext --inplace
编译后会生成对应的so文件。
4.删除原始py文件,并且重启服务
python manage.py runserver
参考链接:
https://blog.csdn.net/m0_59882674/article/details/118405486
ps:
在开发环境尽量不要编译为so文件,否则新添加的代码可能会无法识别。如果提示如下的类似错误:
return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1014, in _gcd_import File "<frozen importlib._bootstrap>", line 991, in _find_and_load File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 671, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 783, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/Users/zhongming/PycharmProjects/djangoProject/GreenPower/UserBase/urls.py", line 18, in <module> path(r'app-menu-data/<int:pk>/', views.appmenu_detail), AttributeError: module 'UserBase.views' has no attribute 'appmenu_detail's
删除掉编译好的so文件即可。