如何将Python脚本“编译”成无需安装Python的PC可用形式?
我有一个Python脚本:
myscript.py
我这样来执行它:
python D:\myscript.py
不过,为了让这个运行成功,我必须在我的电脑上安装Python,并且要把它放在PATH
环境变量里。
有没有办法把Python的可执行文件和这个Python脚本“打包”在一起,这样其他人就可以在他们的电脑上运行这个脚本,而不需要安装Python?
如果只在Windows上能运行就可以。
编辑:
我尝试了compile.py
,但是出现了这个错误:
Traceback (most recent call last):
File "D:\stuff\compile.py", line 4, in <module>
import py2exe
ImportError: No module named py2exe
5 个回答
11
你想要的东西类似于 py2exe。
13
PyInstaller 对我来说效果很好,它能生成相对较小的程序包,因为它使用了 upx。它的依赖检测比当时的 py2exe 更好。不过,它似乎最近没有太多更新,可能不支持 3.x 版本。
在代码库中的源代码比 1.4 版本的包更适合入手。
还可以查看关于 Python 2.6+ 的维基页面。
以下是一些功能列表:
- 可以把 Python 程序打包成标准的可执行文件,这样在没有安装 Python 的电脑上也能运行。
- 支持多平台:可以在 Windows(32位和64位)、Linux(32位和64位)和 Mac OS X(目前只支持32位)上运行。
- 支持多个版本:可以在任何版本的 Python 上运行,从 1.5 到 2.7。注意:如果你在 Windows 上使用 Python 2.6+,请查看 Python26Win。
- 灵活的打包模式:
- 单目录:构建一个包含可执行文件和程序使用的所有外部二进制模块(.dll, .pyd, .so)的目录。
- 单文件:构建一个完全自包含的可执行文件,运行时不需要任何外部依赖。
- 自定义:你可以通过一个简单的 Python 脚本自动化 PyInstaller,做你想要的任何打包模式。
- 对许多第三方包提供明确的智能支持(比如隐藏导入、外部数据文件等),让它们能直接与 PyInstaller 配合使用(见 SupportedPackages)。
- 完全支持单文件 EGG:所需的 .egg 文件会自动检查依赖关系并打包,所有与 egg 相关的功能在运行时也能支持(入口点等)。
- 部分目录 EGG 支持:所需的 .egg 目录会自动检查依赖关系并打包,但 egg 特有的功能在运行时无法使用。
- 自动支持通过 ctypes 使用的二进制库(详细信息见 CtypesDependencySupport)。
- 支持通过知名的 UPX 压缩工具进行自动二进制打包。
- 可选的控制台模式(在运行时查看标准输出和标准错误)。
- Windows 特有功能:
- 支持对可执行文件进行代码签名。
- 完全自动支持 CRTs:不需要手动分发 MSVCR*.DLL、重分发安装程序、清单或其他任何东西;真正的一文件应用程序,随处可用!
- 可选择的可执行文件图标。
- 可完全配置的版本资源部分和可执行文件中的清单。
- 支持构建 COM 服务器。
- Mac 特有功能:
- 初步支持捆绑(见 MacOsCompatibility)。
29
这里有一种方法可以做到这一点(适用于Windows,使用 py2exe
)。
首先,在你的Windows电脑上安装 py2exe
。
然后创建一个名为 compile.py
的Python脚本,内容如下:
import sys
from distutils.core import setup
import py2exe
entry_point = sys.argv[1]
sys.argv.pop()
sys.argv.append('py2exe')
sys.argv.append('-q')
opts = {
'py2exe': {
'compressed': 1,
'optimize': 2,
'bundle_files': 1
}
}
setup(console=[entry_point], options=opts, zipfile=None)
要将你的Python脚本编译成Windows可执行文件,运行这个脚本,并把你的程序作为参数传入:
$ python compile.py myscript.py
这样就会生成一个包含Python解释器的可执行文件(EXE)。你可以直接分发这个可执行文件。