##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脚本异常情况补充说明
部分异常及相应问题解决可参考如下链接: