Python 高手编程系列四百五十一:cx_Freeze

cx_Freeze(http://cx-freeze.sourceforge.net/)是另一种用于创建独立可执行文件的工具。
它是一种比 PyInstaller 更加简单的解决方案,但也支持 3 个主要平台:
• Windows;
• Linux;
• Mac OS X。
与 PyInstaller 一样,它不允许我们执行跨平台构建,因此你需要在想要分发的同一个
操作系统中创建可执行文件。cx_Freeze 的主要缺点是它不允许我们创建真正的单文件可执
行文件。用它构建的应用都需要与相关的 DLL 文件和库一起分发。假如我们想要创建与
PyInstaller 一节介绍过的相同的应用,示例用法也非常简单,如下所示:
$ cxfreeze myscript.py
copying C:\Python27\lib\site-packages\cx_ _Freeze\bases\Console.exe ->
D:\dev\app\dist\myscript.exe
copying C:\Windows\system32\python27.dll ->
D:\dev\app\dist\python27.dll
writing zip file D:\dev\app\dist\myscript.exe
(…)
copying C:\Python27\DLLs\bz2.pyd -> D:\dev\app\dist\bz2.pyd
copying C:\Python27\DLLs\unicodedata.pyd ->
D:\dev\app\dist\unicodedata.pyd
生成的文件结构如下所示:
$ tree /f
│ myscript.py

└───dist
bz2.pyd
myscript.exe
python27.dll
unicodedata.pyd
cx_Freeze 扩展了 distutils 包,而不是为构建规范提供自己的格式(像 PyInstaller 那
样)。也就是说,你可以使用熟悉的 setup.py 脚本来配置如何构建独立可执行文件。如果
你已经使用 setuptools 或 distutils 来分发包的话,那么使用 cx_Freeze 非常方便,因
为额外的集成只需要对 setup.py 脚本进行很小的修改。下面是这种 setup.py 脚本的一
个示例,利用 cx_Freeze.setup()在 Windows 上创建独立可执行文件,如下所示:
import sys
from cx_Freeze import setup, Executable

自动检测依赖。但可能需要微调。

build_exe_options = {“packages”: [“os”], “excludes”: [“tkinter”]}
setup(
name=“myscript”,
version=“0.0.1”,
description=“My Hello World application!”,
options={
“build_exe”: build_exe_options
},
executables=[Executable(“myscript.py”)]
)
利用这样一个文件,可以向 setup.py 脚本添加新的 build_exe 命令来创建新的可
执行文件:
$ python setup.py build_ _exe
cx_Freeze 的用法似乎比 PyInstaller 更简单一些,而且 distutils 集成是一个非常有
用的功能。不幸的是,这个项目可能会给没有经验的开发者带来一些麻烦。
• 在 Windows 中利用 pip 安装可能会有问题。
• 官方文档非常简短,有些地方还是缺失的。
py2exe 和 py2app
py2exe(http://www.py2exe.org/)和 py2app(https://pythonhosted.org/py2app/)是另外
两种用于创建独立可执行文件的程序,通过 distutils 或 setuptools 与 Python 打包
进行集成。这里将它们二者放在一起,是因为它们的用法和限制都非常相似。py2exe 和
py2app 的主要缺点是它们只面向一种平台。
• py2exe 允许构建 Windows 可执行文件。
• py2app 允许构建 Mac OS X 应用。
由于用法非常相似,并且只需要修改 setup.py 脚本,这两个包似乎是互补的。py2app
项目的文档中给出了 setup.py 脚本的以下示例,可以根据所使用的平台选择正确的工具
(py2exe 或 py2app)来构建独立可执行文件,如下所示:
import sys
from setuptools import setup
mainscript = ‘MyApplication.py’
if sys.platform == ‘darwin’:
extra_options = dict(
setup_requires=[‘py2app’],
app=[mainscript],

Cross-platform applications generally expect sys.argv to

be used for opening files.

options=dict(py2app=dict(argv_emulation=True)),
)
elif sys.platform == ‘win32’:
extra_options = dict(
setup_requires=[‘py2exe’],
app=[mainscript],
)
else:
extra_options = dict(

Normally unix-like platforms will use “setup.py install”

and install the main script as such

scripts=[mainscript],
)
setup(
name=“MyApplication”,
**extra_options
)
有了这样的脚本,你可以利用 python setup.py py2exe 命令构建 Windows 可执
行文件,也可以利用 python setup.py py2app 构建 Mac OS X 应用。交叉编译当然是
不可能的。
尽管有一些限制,并且灵活性不如PyInstaller或cx_Freeze,但最好知道py2exe和py2app
项目的存在。在某些情况下,PyInstaller 或 cx_Freeze 可能无法正确构建项目的可执行文件。
在这种情况下,检查其他解决方案能否处理我们的代码总是值得的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值