Python程序发布(打包)及pyInstaller、cx_Freeze工具使用介绍

Python程序发布

Python程序发布时,通常包括以下三种形式:

  • py源码:即源程序代码,使用时需要Python执行环境(包含对应的依赖库)
  • pyc形式:由py文件编译生成,源码私密性提升、运行速度提升
  • 可执行文件:可直接运行的程序文件,不同平台(Mac/Linux/Windows…)下的格式不同,与平台强关联。无须额外下载依赖程序,指定平台下可直接使用

Python程序打包成可执行程序工具比较

参考链接

Solution Windows Linux OS X Python 3 License One-file mode Zipfile import Eggs pkg_resources support
bbFreeze yes yes yes no MIT no yes yes yes
py2exe yes no no yes MIT yes yes no no
pyInstaller yes yes yes yes GPL yes no yes no
cx_Freeze yes yes yes yes PSF no yes yes no
py2app no no yes yes MIT no yes yes yes

其中pyInstaller与cx_Freeze的通用性最强(全平台支持、支持Python3),故仅对这两种工具进行说明。对应工具的安装可直接使用pip search指令查询,并使用pip install 指令安装,本文不做多余描述

pyInstaller

pyInstaller是指令+参数形式:

pyinstaller [options] script [script …] | specfile

执行上述指令后,会自动生成两个目录 build和dist,可执行文件包含在dist目录中,同时包含了其他打包的库。pyInstaller是支持 单文件模式(上表中的One-file mode) 的,可以通过-F 选项打包成单一可执行文件:

pyinstaller -F specfile

pyInstaller命令执行时,会自动生成一个.spec文件,用户可手动修改该文件,用于加强处理(譬如对相应的文件过滤等)。对应规则可参考 using-spec-files
然后使用指令:

pyinstaller specfile
pyi-build specfile

更详细的使用可以参考官方文档

cx_Freeze

cx_Freeze构建脚本

cx_Freeze建立在构建脚本(官方假设其名为setup.py),其基本格式为:

import sys
from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}

# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(  name = "guifoo",
        version = "0.1",
        description = "My GUI application!",
        options = {"build_exe": build_exe_options},
        executables = [Executable("guifoo.py", base=base)])

在命令行中使用命令:

python setup.py build

该命令将在setup.py脚本同目录下生成一个 build 文件夹,其中包含了 setup.py中指定名称的可执行文件,同时包含了其他依赖的库等。
在Windows下可以使用如下指令生成安装文件(msi):

python setup.py bdist_msi

而在Mac OS X中,则可以使用如下指令生成对应的dmg安装文件:

python setup.py bdist_dmg

官方提供了若干依赖脚本示例 — Github地址
关于cx_Freeze中setup.py文件里的相关参数说明,可直接参考 官方文档,后续本文可能会对部分特殊的情况进行补充说明

cx_Freeze脚本异常情况补充说明

部分异常及相应问题解决可参考如下链接:

用 cx_Freeze 将 Python 脚本编译为 Windows exe 实战

你可能感兴趣的:(D0010,Python)