冻结(freezing)您的代码

https://farm5.staticflickr.com/4227/33907151034_e0a9e53402_k_d.jpg

“冻结”您的代码是指创建单个可执行文件,以分发给包含所有程序代码以及Python解释器的终端用户。

像“Dropbox”、“星战前夜”、“文明4”和“BitTorrent 客户端”都是如此。

进行这种分发的好处是您的用户不需要安装好所要求版本的Python(或其他)就可以运行您的应用程序。在Windows上,甚至许多Linux发行版和OS X,特定的Python版本并不总是安装好的。

此外,终端用户软件应始终是可执行的格式。 以.py 结尾的文件适用于软件工程师和系统管理员。

冻结的一个缺点是它会增加大约2-12MB的发行大小。另外,如果修补了Python的安全漏洞,您将负责分发更新版本的应用程序。

冻结的多种方式

打包您的代码 是指把您的库或工具分发给其他开发者。

在Linux 一个冻结的待选物是创建一个Linux分发包(比如,对于 Debian 或 Ubuntu 是 .deb文件,而对于 Red Hat 与 SuSE 是 .rpm 文件)

待处理

完善 "冻结您的代码" 部分(stub)。

比较冻结工具

各解决方案的平台/特性支持性

SolutionWindowsLinuxOS XPython 3LicenseOne-file modeZipfile importEggspkg_resources support
bbFreezeyesyesyesnoMITnoyesyesyes
py2exeyesnonoyesMITyesyesnono
pyInstalleryesyesyesyesGPLyesnoyesno
cx_FreezeyesyesyesyesPSFnoyesyesno
py2appnonoyesyesMITnoyesyesyes

注解

从Linux到Windows的冻结只有PyInstaller支持,其余的

注解

所有解决方案,除了py2app以外,需要在目标机器上安装了Microsoft Visual C++ dll。只有PyInstaller可通过传递--onefileConfigure.py 中,创建绑定了合适dll、可以自运行的exe文件。

Windows

bbFreeze

前置要求是安装Python, Setuptools 以及 pywin32 的依赖项

待处理

补充更多简单的生成 .exe的步骤。

  1. 安装bbfreeze:
$ pip install bbfreeze
  1. 编写最基本的bb_setup.py
frombbfreezeimportFreezerfreezer=Freezer(distdir='dist')freezer.addScript('foobar.py',gui_only=True)freezer()

注解

这将适用于最基本的文件脚本。 要进行更高级的冻结,您必须提供包含和排除类似路径

freezer=Freezer(distdir='dist',includes=['my_code'],excludes=['docs'])
  1. (可选) 包含图标
freezer.setIcon('my_awesome_icon.ico')

4. 为冻结器(freezer)提供Microsoft Visual C运行时DLL。 将Microsoft Visual Studio 路径附加您的sys.path 中是可以的,但我发现在脚本所在同一文件夹中放msvcp90.dll则更加容易。

  1. 冻结!
$ python bb_setup.py

py2exe

前置要求是安装了Python on Windows。py2exe 的最后一个版本是从2014年开始的,且没有处于积极的开发中。

  1. 下载并且安装http://sourceforge.net/projects/py2exe/files/py2exe/
  2. 编写setup.py (配置选项清单):
fromdistutils.coreimportsetupimportpy2exesetup(windows=[{'script':'foobar.py'}],)
  1. (可选)包含图标
  2. (可选)单文件模式
  3. 生成 :file:.exedist 目录:
$ python setup.py py2exe

6.提供Microsoft Visual C 运行时DLL。两个选项:在目标机器全局安装dll 或者与.exe一起分发dll

OS X

py2app

PyInstaller

PyInstaller可用于在Mac OS X 10.6(Snow Leopard)或更新版本上构建Unix可执行文件和窗口应用程序。

要安装PyInstaller, 使用pip:

$ pip install pyinstaller

要创建标准的Unix可执行文件, 使用script.py

$ pyinstaller script.py

这会创建,

  • script.spec 文件, 类似于make 文件
  • build 文件夹, 存放日志文件
  • dist 文件夹, 存放主要的可执行文件script ,和一些依赖的Python库

script.py 会把全部内容放在同一个文件夹中。PyInstaller将所有script.py用到的Python库放到dist 文件夹中。所以在分发可执行文件时,会分发整个dist文件夹。

script.spec 文件可以编辑成自定义构建 ,比如可以:

  • 将数据文件与可执行文件绑定在一起
  • 包含PyInstaller无法自动推断的运行时库(.dll.so 文件)
  • 将Python运行时选项添加到可执行文件中

现在:代码script.spec 可以用pyinstaller (而不是再次使用script.py )运行。

$ pyinstaller script.spec

要创建独立的OS X窗口应用程序,请使用--windowed 选项:

$ pyinstaller --windowed script.spec

这将在dist 文件夹中创建一个代码script.app 。请确保在Python代码中使用GUI软件包,例如PyQtPySide,来控制应用程序的图形部分。

script.spec 有几个与Mac OS X应用程序捆绑有关的选项 。例如,要指定应用程序的图标,请使用icon=\path\to\icon.icns 选项。

Linux

bbFreeze

PyInstaller