用pyinstaller打包python脚本

前言

用python写的脚本做工具十分方便,但是却只能够再本机或者其他安装了相同python开发环境的机器上运行。所以一般需要外发的时候程序的时候都会将python项目打包成exe可执行的文件。

目前将python转化为exe文件的方法又两种:

  1. 用py2exe工具打包
  2. 用pyinstaller工具打包

py2exe打包的exe只能再相同的操作系统下运行,且打包文件页需要同exe下的dll和一些库的压缩包。而pyinstaller可以通过命令参数选择生成一个独立可执行的exe文件还是包含exe和dll的文件夹,pyinstaller支持多种python版本(包括2.x和3.x的版本),使用起来也相对的更加灵活,所以本文仅介绍pyinstaller的使用。

安装pyinstaller

  1. 方法一: 是用pip安装

    保证python的环境正确,且安装的pip工具后,在命令行中执行以下命令:

    1
    pip install pyinstaller
  2. 方法二: 下载源码安装

    在github上https://github.com/pyinstaller/pyinstaller下载源码,在命令行执行以下命令:

    1
    2
    3
    4
    cd bootloader
    python ./waf configure build install
    cd ..
    python setup.py install

pyinstaller的使用

在命令行中执行以下命令,可以将指定的文件转化为exe文件包。

1
pyinstaller Test.py

执行完上面的命令后,会自动生成两个文件夹和一个新文件:build/、dist/、Test.spec。 dist目录存放最终生成的程序,build目录存放exe的中间文件,.spec文件用来提供用户自定义生成参数。

在上面的命令行中加入-F的选项,则可以指定生成为一个单独可执行的exe文件。

1
pyinstaller -F Test.py

打包的文件可以用UPX去压缩,命令如下,但是前提是需要先安装好UPX。

1
pyinstaller -F Test.py --upx-dir upx391w

使用.spec文件定制转换

通过Analysis会输出五中类型:

  • pyz:python的模块
  • scripts:代码源文件
  • binaries:动态库
  • datas:数据文件可以是任意文件类型
  • zipfiles:zip格式的依赖文件,一般是egg格式的库文件

这五类为后面提供使用。

  1. 设置exe文件打包的文件

    设置exe字段,exe打包了python模块、源代码、动态库、数据文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    exe = EXE(pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    name='QtWindow',
    debug=False,
    strip=False,
    upx=True,
    console=True )
  2. 设置输出文件夹的包含的内容

    由于exe中已经打包了很多文件了,但是我并没有将界面ui文件一起打包,所以输出文件夹时把需要用到的界面文件包涵进去。

    1
    2
    3
    coll = COLLECT(exe,
    [('ui/testMainWindow.ui', './ui/testMainWindow.ui', 'DATA')],
    name='dist')

参考

  1. PyInstaller安装方法及简单的编译exe (python3)
  2. pyinstaller使用-python项目转换成exe可执行文件
  3. pyinstaller打包文件
Compartir