pyinstaller可以将python项目打包发布成exe文件,方便在没有python的环境上使用。
安装流程就不说了,网上很多,有在线也有离线的,我由于环境原因只能使用离线安装。
安装完成后可以在cmd中敲pyinstaller -v查看以下,安装正常会有版本号出来。
1.常用参数
参数 | 距离 | 含义 |
---|---|---|
-D | pyinstaller -D demo.py | 默认选项。除了主程序demo.exe外,还会在在dist文件夹中生成很多依赖文件,推荐使用。 |
-F | pyinstaller -F demo.py | 默认选项。使用控制台,只对windows有效。 |
-i | pyinstaller -i D:\icons\demo.ico demo.py | 给生成的demo.exe文件设置一个自定义的图标。 |
-c | pyinstaller -c demo.py | 默认选项。使用控制台,只对windows有效。 |
-p | pyinstaller -p D:\project\demo.py | 设置导入路径。 |
-w | pyinstaller -w demo.py | 不使用控制台,只对windows有效。 |
2.打包简单的文件
当我们想要打包一个简单的py文件,即没有依赖其他py文件,包的文件。可以使用如下命令:
首先cmd进入项目目录
pyinstaller -F demo.py
然后目录下会生成一个build文件夹和一个dist文件夹,文件内就是我们需要的exe文件。
3.打包复杂的项目
复杂的项目就不能用上述的方法了,因为复杂的项目里面,会有很多依赖,我们要将这些依赖的文件也在打包的时候添加进来。
假如我们的入口文件是 demo.py,我们首先运行 pyinstaller -F demo.py ,此时我们的项目下面会生成 demo.spec文件以及build和dist文件夹,删除build和dist文件夹保留demo.spec文件,并且打开demo.spec文件编辑。
.spec 文件是使用 PyInstaller 工具打包 Python 程序时生成的配置文件。它告诉 PyInstaller 打包程序时需要包含哪些文件、依赖项以及其他设置。文件中包含了许多配置选项。
#import sys
#sys.setrecursionlimit(5000)
#这个可以不加,如果遇到了RecursionError: maximum recursion depth exceeded这个错误,加上这俩就能解决了
block_cipher = None #用于定义加密算法,可以加密打包后的代码。
a = Analysis(['demo.py',
'a.py',
'b.py',
'c.py',
'D:\\deploy\\e.py',
'D:\\deploy\\f.py',
'D:\\deploy\\g.py'],#此项目中所有的python脚本,这里只能放py文件,demo.py以外路径下的py文件需要用绝对路径说明
pathex=[ 'D:\\Project\\python\\xxxTool'],#程序的搜索路径,在这些路径中查找被导入的模块。可以在这里加入其他demo.py以外路径下的py文件的路径,毕竟项目文件多的时候,上面的添加方式太繁琐了
binaries=[],
datas=[],#指定要包含在打包文件中的数据文件或其他非 Python 文件的路径和目标位置。此列表存放所有的资源文件,每个文件是一个二元组元素
#add_files = [ ('fonts\\font.ttf', 'fonts'),
('images\\*.png', 'images'),
('images\\flappy.ico', 'images'),
('audios\\*.wav', 'audios'), ]
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 = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='demo666', #定义打包程序的名字
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True )# 此处console=True表示,打包后的可执行文件双击运行时屏幕会出现一个cmd窗口,不影响原程序运行
#如果想要修改程序图标,使用在EXE()中加入 icon='xxxxx', 切记:绝对路径
完成.spec的修改之后,再次执行:
pyinstaller -F demo.py
等运行结束,exe文件就在dist文件夹下。