0%

PyInstaller打包exe

python打包*.py为exe常用PyInstaller。安装方法:

1
pip install pyinstaller

@TOC

常用命令

基本命令如下。

1
pyinstaller scriptname

其中scriptname为打包的文件或一个.spec-file

常用语句形式

  • 有界面的一般形式

    1
    pyinstaller -Fw xxx.py -i aaa.ico
  • 无界面的一般形式

    1
    pyinstaller -F xxx.py -i aaa.ico

常用可选参数

简略命令

可选参数 作用
-F 打包为一个文件
-D 一个目录,包含exe,依赖多
-c 使用控制台
-w 无控制台,使用窗口
-i 加.ico图标
–version-file 添加版本信息

详细命令

可选参数 作用
-D, –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)
-F, –onefile 打包为一个exe
–specpath DIR 指定生成.spec-file的目录,默认是当前目录
-n NAME, –name NAME 指定打包应用和.spec-file的名字,默认是第一个脚本的文件名
-i <FILE.ico>, –icon <FILE.ico> 添加图标(可选实际很多类型<FILE.ico or FILE.exe,ID or FILE.icns or “NONE”>)
–version-file FILE 从version-file为exe增加版本信息
-c, –console, –nowindowed 使用控制台,无窗口(默认)。在Windows中第一个脚本是.pyw文件,此项无效。
-w, –windowed, –noconsole 使用窗口,无控制台。Windows第一脚本是.pyw自动启用。在*NIX系统此项忽略。

pyinstaller更多详细命令可参考命令pyinstaller --help的输出结果。

增加版本信息

版本信息增加两步走:

  1. 使用 pyi-grab_version 获取版本信息的模板文件。
  2. 使用 pyi-set_version 为打包好的程序附加版本信息。

获取版本信息模板文件

pyi-grab_version对已有版本信息的exe(如Chrome、微信、QQ等等)只要有就成。

1
pyi-grab_version [-h] exe-file [out-filename]

示例如下

1
pyi-grab_version "C:\Program Files\Nutstore\Nutstore.exe" version-info.txt

version-info.txt就是获取的版本信息模板,我们可以对它进行编辑,修改成我们想给打包的程序设定的信息。

设置版本信息

有两种方式

  • 在打包时加入版本信息

    加入选项 –version-file version-file

    1
    pyinstaller -Fw --version-file version-file py-file

    示例:

    1
    pyinstaller -Fw --version-file version-info.txt xxx.py
  • 另外添加版本信息

    使用pyi-set_version为已打包好的exe文件添加或修改版本信息

    1
    pyi-set_version version-file exe-file

    示例:

    1
    pyi-set_version version-info.txt xxx.exe

附加资源文件

1
2
3
4
5
6
7
8
9
10
11
#生成资源文件目录访问路径
def resource_path(r_path):
if getattr(sys, 'frozen', False): #是否Bundle Resource
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(".")
return os.path.join(base_path, r_path)

def main(root, startno=0, endno=537):
# 其他使用资源文件的地方
file_n = resource_path(os.path.join("res",'dataset_registry.csv'))

修改.spec文件

1
datas=[('res','res')],