使用Pyinstaller打包EXE

本文最后更新于:5 个月前

安装 pyinstaller 库

1
pip install pyinstaller

使用 pyinstaller 打包

选项参数
选项 描述
-h,–help 显示帮助信息
-v,–version 显示版本号
–distpath DIR 指定打包后的程序存放目录,默认存放在当前目录下的dist目录
–workpath WORKPATH 为输出的所有临时文件指定存放目录
–clean 在构建之前,请清理PyInstaller缓存并删除临时文件
-D,–onedir 生成结果是一个包含exe程序的目录,所有第三方依赖库和其他资源和exe程序位于同一目录下
-F,–onefile 生成结果是一个exe程序,所有第三方依赖库和其他资源都被打包进该exe程序中—
–key 对打包进行加密处理

反编译Pyinstaller打包的exe

这样的exe已经可以被迁移到别的电脑上使用了,如果是为了方便其他电脑使用,到这一步就已经结束了。但有时候,我们可能是把这个功能给很多人用,但如果不想开源或者被别人破解,到这一步是还不够的。因为到这一步的exe是可以被别人反编译出源码的

工具

exe反编译工具:pyinstxtractor.py

pyc反编译工具:Easy Python Decompiler 或者在线反编译pyc。

将pyinstxtractor.py放到exe文件相同目录,执行以下cmd命令:

1
python pyinstxtractor.py main.exe
将脚本编译为pyd以防止反编译

如何解决呢,可以考虑将模块py文件编译为动态链接库,这样破解难度将大大增加。其中,在python里,pyd格式即动态链接库。使用cython即可编译,如果是anaconda是自带,python有的可能不带cython,安装即可:

1
pip install Cython

我们在main.py所在的文件夹新建py文件,在此处我命名为build_pyd.py,其内容如下:

1
2
3
4
5
6
7
8
from distutils.core import setup
from Cython.Build import cythonize

setup(
name = 'any words.....',
ext_modules = cythonize(["mylib.py",]
),
)

然后执行以下cmd命令:

1
python build_pyd.py build_ext --inplace --compiler=msvc

此时就会多出一个pyd后缀文件,修改文件名,然后我们删除build、disk文件夹,重复步骤二,再次编译为exe即可。

错误问题

执行出现 unable to find vcvarsall.bat

安装Visual C++ Build Tools 2015/2017 即可 下载地址

打包出现问题
1
2
3
4
5
6
#升级pip
python -m pip install --upgrade pip

# 重新安装
pip install pyinstaller

参考地址

https://www.jb51.net/article/184725.htm

https://blog.csdn.net/u013451076/article/details/105815788

https://www.jb51.net/article/184725.htm