一、说明

先上官网:https://pyinstaller.org/en/stable/

pip install pyinstaller

可以使用命令行直接打包,也可以生成spec文件打包,还可以使用auto-py-to-exe打包。

1、命令行参数说明

# 查看其参数说明
pyinstaller -h

参数

说明

-F

产生单个的可执行文件

-D

产生一个目录(包含多个文件)作为可执行程序

-a

不包含 Unicode 字符集支持

-d

debug 版本的可执行文件

-w

指定程序运行时不显示命令行窗口(仅对 Windows 有效)

-c

指定使用命令行窗口运行程序(仅对 Windows 有效)

-o

指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件

-p

设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径

-n

指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字

2、spec文件说明

  • 创建pyinstaller spec (specification) 文件:
pyi-makespec <options> 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图标绝对路径,可选
          )

3、auto-py-to-exe

官网:auto-py-to-exe中文文档

  • 安装
    pip install auto-py-to-exe
  • 运行
    打开控制台输入auto-py-to-exe即可
  • 界面
    如下
  • 说明

二、打包多文件,多目录项目

1、项目说明

本项目目录结构为:

- MyProject
	- In
	- Out
	- App
		- __init__.py
		- app.py
		- MainProgram
			- __init__.py
			- 1.py
			- 2.py
			- main.py

期望打包后的结构:

- MyProject
	- In
	- Out
	- App
		- App.exe

2、 打包流程

说明:建议使用python自带的venv,在本项目目录下生成环境依赖

  • 生成spec文件
cd App # 切换到打包程序目录
pyi-makespec app.py # 生成spec文件
  • 配置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
  • 等待…

3、补充说明

  • 使用单文件模式时,需在原代码内配置好输入输出与exe文件的相对路径。
    具体见:
  • conda中pyinstaller指定python版本:
    在当前conda环境中,安装pyinstaller即可

三、Pyinstaller支持WIN7