PYC编码
使用python自带的编译命令,编译成对应的二进制程序,还是可以被反编译,但是至少无法被直接查看。
pyc除了看不到源代码,其他使用上和py文件,没有太大差异。
在settools打包egg
# 打包
python ./setup/all.py bdist_egg --exclude-source-files
# 运行
egg_path='/home/shahid/suds_2.4.egg'
sys.path.append(egg_path)
import suds
suds.run()
普通情况下的编译
这种方式比较麻烦,因为pyc作为临时文件,是不推荐直接删除python文件。需要自己编写脚本完成下面部署:
- py_compile 强制编译生成pyc.
- 删除py文件。
python -m compileall .
find . -name "__pycache__" -exec rm -f {} \;
find . -name "*.py" -exec rm -rf {} \;
CPYTHON
使用cpython将python代码编译成C/C++,然后再编译成python扩展模块,windows上为pyd文件,Linux上为so文件.
打包成可执行文件
发现pyinstaller这个打包工具比较受人欢迎,经它打包后的exe文件可以在无python的环境下运行。
如果项目是只是服务中的依赖包例如egg就无法实现了。
代码混淆
命令: pyminifier
代码混淆方案的缺陷在于,只能针对一个文件进行混淆,这样作为一个项目互相调用肯定有问题。(类名和方法名会变化)
需要针对需要混淆的文件,进行模块化设计。
虚拟机封装
在虚拟机安转好以后,修改登录密码,并且不告知客户。所有对虚拟机的操作通过开发服务进行调用。