window和Linux下使用的方法相同,windows下打包为.exe,Linux打包没有扩展名
打包
pip install pyinstaller # 安装 pyinstaller –F main.py # 将主文件以及该目录、文件夹下所有的.py文件打包为单个可执行文件 主要参数: –F 打包成单个可执行文件 –D 打包成文件夹 —clean 在构建之前,清理PyInstaller缓存并删除临时文件(多次打包会报错,最好清除缓存) —upx–dir 结合UPX压缩打包(—upx–dir=path/pux) —key 指定加密密钥来用AES256来混淆Python字节码(实际性能参见官方使用手册),需要安装crypto库
PyInstaller使用手册
使用
windows下: main.exe 你的参数 Linux下: ./main 你的参数 # ubuntu
踩过的坑
1.打包项目中包含不是.py文件的配置文件等
错误提示:找不到XXX文件
基本原理:Pyinstaller 可以将资源文件一起bundle到exe中,当exe在运行时,会生成一个临时文件夹,程序可通过sys._MEIPASS访问临时文件夹中的资源。
import os import sys
#获取临时文件夹中的资源 def resource_path(relative_path): base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) return os.path.join(base_path, relative_path)
path=resource_path('confxxx1.conf') #用path替换项目中引用XXX.txt的位置
将资源文件打包的方法:pyinstaller -F main.py 在当前目录下生成 main.spec文件,修改文件
# -*- mode: python ; coding: utf-8 -*- #windows下 block_cipher = None
a = Analysis(['main.py'], pathex=['C:\Users\xxx\Desktop\main'], binaries=[], datas=[('conf\xxx1.conf','conf'), ('conf\xxx2.conf','conf')], <——添加你的资源文件 hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='main', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True )
最后打包命令:pyinstaller -F main.spec
2.总是打包不成单个执行文件,而打包成一个文件夹
如果之前用- D命令生成了.spec文件,而你添加了datas之后,还在使用这个.spec文件打包,那么就会导致你一直生成一个文件夹,而不是单个执行文件。
3.crypto安装不上
pycrypto,pycryptodome和crypto是一个东西;pycryptodome是pycrypto的延伸版本,用法和pycrypto 是一模一样。
出现报错:将Python38Libsite-packages下的Cryptodome文件夹名修改成Crypto:(py3.7之后需要改)
关于反编译
exe反编译:python pyinstxtractor.py main.exe
(pyinstxtractor.py网上找的脚本)
pyc反编译:在线反编译pyc或者工具python-uncompyle6
exe反编译之后,找到了一些.pyc文件,但是无论使用在线反编译pyc或是工具都不能反编译出来,使用或不使用–key也都一样。同时也尝试对正常执行py文件情况下生成pyc进行反编译,在线或是工具都是可以反编译的。
浅尝辄止,有明白的还请指教
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试