【Python】Python项目打包发布(一)(基于Pyinstaller打包多目录项目)
【Python】Python项目打包发布(二)(基于Pyinstaller打包PyWebIO项目)
【Python】Python项目打包发布(三)(基于Aardio打包多目录项目)
【Python】Python项目打包发布(四)(基于Nuitka打包PySide6项目)
【Python】Python项目打包发布(五)(制作Windows安装包)
先上官网:https://pyinstaller.org/en/stable/
pip install pyinstaller
可以使用命令行直接打包,也可以生成spec文件打包,还可以使用auto-py-to-exe打包。
# 查看其参数说明
pyinstaller -h
参数 | 说明 |
---|---|
-F | 产生单个的可执行文件 |
-D | 产生一个目录(包含多个文件)作为可执行程序 |
-a | 不包含 Unicode 字符集支持 |
-d | debug 版本的可执行文件 |
-w | 指定程序运行时不显示命令行窗口(仅对 Windows 有效) |
-c | 指定使用命令行窗口运行程序(仅对 Windows 有效) |
-o | 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件 |
-p | 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径 |
-n | 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字 |
pyi-makespec app.py
pyi-makespec --onefile app.py # 生产一个文件的话
pyi-makespec --key 123456 --onefile app.py # 生产一个文件,以123456加密
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis([], # 此列表存放项目设计的所有python脚本文件
pathex=[], # 此列表为项目绝对路径
binaries=[],
datas=[], # 此列表存放所有资源文件,每个文件是一个2元组元素
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='setup', # 打包程序的名字
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,# 是否显示控制台
icon=) # exe图标绝对路径,可选
)
官网:auto-py-to-exe中文文档
本项目目录结构为:
- MyProject
- In
- Out
- App
- __init__.py
- app.py
- MainProgram
- __init__.py
- 1.py
- 2.py
- main.py
期望打包后的结构:
- MyProject
- In
- Out
- App
- App.exe
说明:建议使用python自带的venv,在本项目目录下生成环境依赖
cd App # 切换到打包程序目录
pyi-makespec app.py # 生成spec文件
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['app.py','MainProgram/1.py','MainProgram/2.py','MainProgram/main.py'],
pathex=['E:\Code\MyGit\CJRes\APP'], # 此列表为项目绝对路径
binaries=[],
datas=[], # 此列表存放所有资源文件,每个文件是一个2元组元素
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='app', # 打包程序的名字
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
icon='E:\Code\MyGit\CJRes\APP\logo.ico') # exe图标
pyinstaller -F app.spec
使用单文件模式时,需在原代码内配置好输入输出与exe文件的相对路径。
具体见:https://blog.csdn.net/qq_25262697/article/details/127991930
conda中pyinstaller指定python版本:
在当前conda环境中,安装pyinstaller即可
Pyinstaller通过spec文件打包py程序(多个py脚本)