冻结您的代码¶

“冻结”您的代码正在创建一个可执行文件,以分发给最终用户,其中包含您的所有应用程序代码以及Python解释器。
像“Dropbox”、“Eve Online”、“文明四”和BitTorrent客户机这样的应用程序可以做到这一点。
以这种方式分发的好处是,即使用户尚未安装所需的Python版本(或任何版本),您的应用程序也将“正常工作”。在Windows上,甚至在许多Linux发行版和OS X上,都不会安装正确版本的python。
此外,最终用户软件应始终采用可执行格式。文件结束于 .py
适用于软件工程师和系统管理员。
冻结的一个缺点是它会将您的分发大小增加大约2-12MB。此外,当修补了python的安全漏洞时,您将负责发送应用程序的更新版本。
冷冻替代品¶
Packaging your code 用于向其他开发人员分发库或工具。
在Linux上,冻结的另一种选择是 create a Linux distro package (例如,Debian或Ubuntu的deb文件,或Red Hat和Suse的.rpm文件。)
待处理
填写“冻结代码”存根
冻结工具比较¶
撰写日期:2019年10月5日支持的解决方案和平台/功能:
解决方案 |
Windows |
Linux系统 |
OS X |
Python 3 |
许可 |
一个文件模式 |
压缩文件导入 |
Eggs |
pkg_资源支持 |
最新发布日期 |
---|---|---|---|---|---|---|---|---|---|---|
bbFreeze |
是 |
是 |
是 |
否 |
MIT |
否 |
是 |
是 |
是 |
2014年1月20日 |
PY2Exe公司 |
是 |
否 |
否 |
是 |
MIT |
是 |
是 |
否 |
否 |
2014年10月21日 |
PY安装程序 |
是 |
是 |
是 |
是 |
GPL |
是 |
否 |
是 |
否 |
2019年7月9日 |
cx_Freeze |
是 |
是 |
是 |
是 |
PSF |
否 |
是 |
是 |
否 |
2019年8月29日 |
PY2APP公司 |
否 |
否 |
是 |
是 |
MIT |
否 |
是 |
是 |
是 |
2019年3月25日 |
备注
PyInstaller只支持将Linux上的python代码冻结到Windows可执行文件中一次。 and later dropped。
备注
除了PY2APP之外,所有解决方案都需要微软Visual C++安装在目标机器上。只有pyinstaller生成一个自执行的exe,在传递时捆绑相应的dll --onefile
到 Configure.py
。
Windows¶
bbFreeze¶
先决条件是安装 Python, Setuptools and pywin32 dependency on Windows。
安装
bbfreeze
:
$ pip install bbfreeze
写最基本的
bb_setup.py
from bbfreeze import Freezer
freezer = Freezer(distdir='dist')
freezer.addScript('foobar.py', gui_only=True)
freezer()
备注
这将适用于最基本的一个文件脚本。对于更高级的冻结,您必须提供包含和排除路径,例如:
freezer = Freezer(distdir='dist', includes=['my_code'], excludes=['docs'])
(可选)包含图标
freezer.setIcon('my_awesome_icon.ico')
4. Provide the Microsoft Visual C++ runtime DLL for the freezer. It might be possible to append your sys.path
with the Microsoft Visual Studio path but I find it easier to drop msvcp90.dll
in the same folder where your script
resides.
别动!
$ python bb_setup.py
PY2Exe公司¶
先决条件是安装 Python on Windows。py2exe的最后一个版本是2014年。没有积极的发展。
下载并安装http://sourceforge.net/projects/py2exe/files/py2exe/
写入:file:`setup.py`(`配置选项列表<http://www.py2exe.org/index.cgi/ListOfOptions>`_):
from distutils.core import setup
import py2exe
setup(
windows=[{'script': 'foobar.py'}],
)
(可选) include icon
(可选) one-file mode
生成
.exe
进入之内dist
目录:
$ python setup.py py2exe
提供微软Visual C++运行时DLL。两种选择: globally install dll on target machine 或 distribute dll alongside with .exe。
PyInstaller¶
先决条件是已安装 Python, Setuptools and pywin32 dependency on Windows。
OS X¶
PY2APP公司¶
PyInstaller¶
PyInstaller可用于在Mac OS X 10.6(雪豹)或更高版本上构建UNIX可执行文件和窗口应用程序。
要安装PyInstaller,请使用pip:
$ pip install pyinstaller
创建标准的Unix可执行文件,例如 script.py
,用途:
$ pyinstaller script.py
这将创建:
a
script.spec
文件,类似于make
文件a
build
文件夹,其中包含一些日志文件a
dist
保存主可执行文件的文件夹script
以及一些依赖的python库
全部在同一文件夹中 script.py
。PyInstaller将使用的所有python库 script.py
进入 dist
文件夹,因此在分发可执行文件时,请分发整个 dist
文件夹。
这个 script.spec
文件可编辑为 customise the build ,选项包括:
将数据文件与可执行文件绑定
包括运行时库 (
.dll
或.so
文件)pyinstaller无法自动推断向可执行文件添加python运行时选项
现在 script.spec
可与一起运行 pyinstaller
(而不是使用 script.py
再说一遍):
$ pyinstaller script.spec
要创建独立窗口的OS X应用程序,请使用 --windowed
选项:
$ pyinstaller --windowed script.spec
这创造了一个 script.app
在 dist
文件夹。确保在Python代码中使用GUI包,比如 PyQt 或 PySide ,以控制应用程序的图形部分。
在 script.spec
与Mac OS X应用程序包相关 here .例如,要为应用程序指定图标,请使用 icon=pathtoicon.icns
选择权。
Linux系统¶
bbFreeze¶
警告
bbFreeze将只在python 2.x环境中工作,因为它不再像以前的维护人员所说的那样进行维护。如果您对它感兴趣,请在 here。
bbFreeze可以与所有安装了python和pip2和/或easy-install的发行版一起使用。
对于PIP2,请使用以下内容:
$ pip2 install bbfreeze
或者,为了便于安装:
$ easy_install bbfreeze
安装bbFreeze后,就可以冻结应用程序了。
假设您有一个脚本,比如说“hello.py”和一个名为“module.py”的模块,其中有一个函数正在脚本中使用。不用担心,您可以请求冻结脚本的主入口点,它应该完全冻结:
$ bbfreeze script.py
通过这个,它创建了一个名为dist/的文件夹,其中包含脚本的可执行文件和必需的.so(共享对象)文件,这些文件与Python脚本中使用的库相链接。
或者,您可以创建一个脚本来为您执行冻结操作。可从以下库中获得冰柜的API:
from bbfreeze import Freezer
freezer = Freezer(distdir='dist')
freezer.addScript('script.py', gui_only=True) # Enable gui_only kwarg for app that uses GUI packages.
freezer()
PyInstaller¶
PyInstaller的使用方式与OSX中类似。安装方式与OSX部分中所示的方式相同。
不要忘记安装依赖项(如python和pip)以供使用。