1.安装pyinstaller
在cmd窗口 输入命令 pip install pyinstaller
2.pyInstaller原理简介
pyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文件,好处就是在运行者的机器上不用安装python和你的脚本
依赖的库。
pyInstaller输入你指定的的脚本,首先分析脚本所依赖的其他脚本,然后去查找,复制,把所有相关的脚本收集起来,包括Python解析
器,然后把这些文件放在一个目录下,或者打包进一个可执行文件里面。
可以直接发布输出的整个文件夹里面的文件,或者生成的可执行文件。你只需要告诉用户,你的应用App是自我包含的,不需要安装其
他包,或某个版本的Python,就可以直接运行了。
3.pyinstaller 打包 直接使用命令 pyinstaller [-F/-D] [-w/-c] [-i xxx.ico] hello.py
最简单的打包:切换到hello.py所在目录 打开cmd ,执行命令 pyinstaller hello.py,就打包完成。在当前目录下会生成build文件夹和 dist文件夹 和 hello.spec文件。
option解释
例如 pyinstaller --add-data C:\test\data;data hello.py 命令。就会生成如下的hello.spec文件
a = Analysis(['hello.py'],
pathex=['C:\\test'],
binaries=[],
datas=[('C:\\test\\data', 'data')])
4.pyinstaller 打包 使用.spec 文件自定义打包
参考 Pyinstaller 打包发布经验总结 , Python中的图片打包与pyinstaller中的spec文件简介, Python三方库:PyInstaller(exe程序打包)
如果一个多文件和目录的Python项目包含 1.Python源代码文件;2.图标资源文件;3.其它资源文件
项目根目录C:\test , Python源代码文件在多个目录下:bin, lib\app, lib\models, lib\views;图标资源文件在lib\icon目录下;其它资源文件在data目录下,包括文本文件,视频文件。直接用命令行 比较复杂,可以用.spec文件 来自定义打包
1.生成.spec文件
执行命令 pyinstaller hello.py 就可以生成hello.spec文件
PS:执行这条命令 也会生成dist文件夹和build文件夹,直接删掉即可,因为这里只需要hello.spec。等会执行hello.spec才是最后build exe
2.修改.spec文件
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['hello.py'],
pathex=['C:\\test'],
binaries=[],
datas=[('C:\\test\\data','data')],
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,
[],
exclude_binaries=True,
name='hello',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='hello')
spec文件分为Analysis, pyz, exe, coll四个部分
3.执行 .spec文件 打包
执行命令 pyinstaller -D hello.spec 完成build exe
pyinstaller打包后的exe运行怎么去掉弹出的命令行提示窗口?
1.如果使用.spec文件的话, 在该文件中找到console=True修改为console=False
2.如果是直接指定python文件进行pyinstaller打包的话,需要添加 --noconsole : pyinstaller hello.py--noconsole