pyinstaller 使用指南 加密打包Python项目
一、安装
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安装包,地址:https://download.csdn.net/download/bow_Rain/85502217
需要注意的是,安装完成后,要把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的文件
参考:
http://www.360doc.com/content/21/1130/10/77916720_1006517975.shtml
https://blog.csdn.net/lemonbit/article/details/121173219
https://blog.csdn.net/zy841958835/article/details/79446871?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-79446871-blog-124245642.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-79446871-blog-124245642.pc_relevant_default&utm_relevant_index=2
https://blog.csdn.net/feelinghappy/article/details/109328697