一、安装
pip install pyinstaller
若使用参数 --key 对打包进行加密,则会提示安装 pip install tinyaes
二、命令行
pyinstaller -F --key '12345678' --clean main.py --distpath=DIR
pyinstaller -F -w mycode.py (-w就是取消控制台)
eg:pyinstaller -F --key '12345678' --clean D:\main2.py --distpath=D:\Atest
三、选项参数
选项 | 描述 |
-h,--help | 显示帮助信息 |
-v,--version | 显示版本号 |
--distpath DIR | 指定打包后的程序存放目录,默认存放在当前目录下的dist目录 |
--workpath WORKPATH | 为输出的所有临时文件指定存放目录 |
--clean | 在构建之前,请清理PyInstaller缓存并删除临时文件 |
-D,--onedir | 生成结果是一个包含exe程序的目录,所有第三方依赖库和其他资源和exe程序位于同一目录下;推荐使用 |
-F,--onefile | 生成结果是一个exe程序,所有第三方依赖库和其他资源都被打包进该exe程序中 |
四、下载缺失DLL文件
免费下载 https://cn.dll-files.com/
五、打包的.exe文件在其他电脑无法运行
最好使用与运行电脑系统相匹配的python版本。
例如:python3.4安装后自带pip和setuptools的版本较低,升级对应的版本
以下是为在XP系统搭建python3.4.4+PyQt5+pyinstaller环境
pip install pip==19.1.1
pip install setuptools==42.0.2
在python3.4中安装pyinstaller,需要安装以下第三方库,可参考博文
pip install wheel==0.33.6 #升级wheel
#下载pywin32(pywin32-224-cp34-cp34m-win32.whl)
#https://www.lfd.uci.edu/~gohlke/pythonlibs/ 可进入下载第三方库
pip install 这里拖入下载好的whl文件
pip install future==0.18.2 #安装future
pip install pyinstaller==3.2.1 #最后完成安装pyinstaller-3.2.1
安装版本更高的pyinstaller
安装pyinstaller3.3或者3.3.1版本
- 除了上面的,还要先安装
- altgraph-0.17
- macholib-1.14
- pefile-2019.4.18
安装pyinstaller3.4或3.5版本
- 除了上面的,还要先安装
- pywin32-ctypes-0.2.0
注:第二次配环境出现了一些错误,这里进行一些补充
打包需要加密可安装 pycrypto,安装地址在下面有
安装相应版本PyQt5
PyQt5.4.1 下载地址
https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.4.1/
打包后的exe文件进行反编译
- 准备好(pyinstaller -F python文件)打包好的exe文件
- 通过pyinstxtractor.py脚本提取打包的exe文件中的pyc文件
pyinstxtractor下载
pyinstxtractor.py脚本可以在Github项目python-exe-unpacker中下载,地址:https://github.com/countercept/python-exe-unpacker
下载完成以后需要先安装运行pyinstxtractor.py脚本所需的依赖项,才能够执行
pefile==2017.9.3
unpy2exe==0.3
uncompyle6==2.11.5
xdis==3.5.5
pycrypto==2.6.1
configparser==3.5.0
其中pycrypto安装容易报错,可以直接下编译好的exe安装包,地址:
需要注意的是,安装完成后,要把Python安装目录\Lib\site-packages下的crypto改为Crypto,不然import提示依然找不到模块。
使用pyinstxtractor.py脚本反编译
将pyinstxtractor.py脚本复制到与exe文件同级目录下,然后进入exe文件所在目录的cmd执行:
python pyinstxtractor.py exe文件
#eg:python pyinstxtractor.py main.exe
执行后便得到exe文件名加上_extracted后缀的文件夹
生成拆解目录如下:
--- xxx.exe_extracted
-- out00-PYZ.pyz_extracted
- 各种.pyc文件
-- out00-PYZ.pyz
-- some
-- others
-- xxx(注意这些都是没后缀的)
PYZ-00.pyz_extracted文件夹内是import的文件