【问题描述】如何防止Python编写的程序被轻易反编译呢?
【小千解答】先将.py文件转成.pyd文件,再打包成.exe。
Step1 安装Cython库
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Cython
Step2 安装和Python版本匹配的MSvc版本/Visual Studio版本。安装过程中,勾选“使用C++的桌面开发”项。
Step3 编写Python源文件,存放在D:\protect文件夹下,文件名:ceshi.py,源码如下:
import datetime as dt import sys today = dt.date.today() with open('d:/abc.txt', 'w', encoding='utf-8') as txt: txt.write('我demo\n') txt.write(str(today) + '\n') txt.write(sys.argv[1] + '\n') txt.write(sys.argv[2] + '\n') try: txt.write(sys.argv[0]) except: txt.write('err')
Step4 在同一路径下创建setup.py,代码如下:
from distutils.core import setup from Cython.Build import cythonize setup(name='test',ext_modules=cythonize('ceshi.py'))
Step5 打开命令行窗口,将当前路径切换至d:\protect,然后输入以下命令将ceshi.py文件转成ceshi.pyd。
python setup.py build_ext --inplace
Step6 将上一步生成的ceshi.cp38-win_amd64.pyd重命名成ceshi.pyd,删除该文件夹中除了ceshi.py、ceshi.pyd和setup.py以外的所有文件和文件夹。
Step7 新建一个xqtool.py文件,代码如下:
from ceshi import *
Step8 使用pyinstaller包将xqtool.py打包成xqtool.exe。
pyinstaller -F -w d:\protect\xqtool.py
【知识拓展】
.pyd是二进制文件,相当于vb6.0制作的.dll文件。如果同一个文件夹内存在同名的.py和.pyd文件,在其它模块里导入时,优先导入.pyd文件,Step7的from ceshi将导入ceshi.pyd而不是ceshi.py,这是实现预期效果的关键所在。
【参考资料】