如何使Python脚本独立可执行文件在没有任何依赖项的情况下运行?

我正在构建一个Python应用程序,不想强迫我的客户安装Python和模块。

那么,有没有办法将Python脚本编译为独立的可执行文件呢?

1374286 次浏览

你可能喜欢py2exe。你还可以在那里找到关于Linux的信息。

您可以使用PyInstaller将Python程序打包为独立的可执行文件。它适用于Windows、Linux和Mac。

PyInstaller快速入门

从PyPI安装PyInstaller:

pip install pyinstaller

转到您的程序目录并运行:

pyinstaller yourprogram.py

这将在名为dist的子目录中生成包。

pyinstaller -F yourprogram.py

添加-F(或--onefile)参数将所有内容打包到单个“exe”中。

pyinstaller -F --paths=<your_path>\Lib\site-packages  yourprogram.py

遇到“输入错误”,您可能会考虑侧包。

 pip install pynput==1.6.8

仍在运行导入-Eror r-尝试降级pyinstall er-请参阅将pynput与pyInster一起使用时出错

有关更详细的走查,请参见手册

第三个选项是cx_Freeze,它是跨平台的。

您可以使用py2exe作为已经回答并使用Cython转换.pyc中的键.py文件,C编译文件,如Windows中的.dll和Linux上的.so

它比普通的.pyo.pyc文件更难恢复(并且还获得了性能!)。

对于Python 3.2脚本,唯一的选择是cx_Freeze。从源代码构建它;否则它将无法工作。

对于Python 2. x,我建议使用PyInstaller,因为它可以将Python程序打包为单个可执行文件,这与输出库的cx_Freeze不同。

我还推荐PyInstaller以获得更好的向后兼容性,例如Python 2.3-2.7。

对于py2exe,您必须拥有Python 2.6。

您可能希望研究Nuitka。它采用Python源代码并将其转换为C++API调用。然后它编译成可执行二进制文件(Linux上的ELF)。它已经存在了几年,并支持广泛的Python版本。

如果您使用它,您可能还会获得性能改进。推荐使用。

使用py2exe……使用以下设置文件:

from distutils.core import setupimport py2exe
from distutils.filelist import findallimport matplotlib
setup(console = ['PlotMemInfo.py'],
options = {'py2exe': {'packages': ['matplotlib'],'dll_excludes': ['libgdk-win32-2.0-0.dll','libgobject-2.0-0.dll','libgdk_pixbuf-2.0-0.dll']}},data_files = matplotlib.get_py2exe_datafiles())

py2exe将生成您想要的EXE文件,但您需要在要使用新EXE文件的机器上拥有相同版本的MSVCR90.dll。

有关更多信息,请参阅教程

您可以找到分发工具中列出的分发实用程序列表。

我使用BBC冻结,它一直工作得很好(虽然还没有Python 3支持)。

我想编译一些关于使用Python 2.7在Windows上创建独立文件的有用信息。

我已经使用了py2exe并且它有效,但我遇到了一些问题。

最后一个原因让我尝试PyInstallerhttp://www.pyinstaller.org/

在我看来,这是更好的,因为:

  • 它更容易使用。

我建议使用以下行创建一个. bat文件(pyinstaller.exe必须在Windows路径中):

pyinstaller.exe --onefile MyCode.py

所以,我认为,至少对于python 2.7,一个更好更简单的选择是PyInstaller。

不完全是Python代码的打包,但现在还有来自Google的脾气暴躁,它将代码转译为

它不支持Python C API,因此它可能不适用于所有项目。

使用Cython转换为C,编译并与GCC链接。

另一种可能是,在C中制作核心函数(你想让它们难以逆转的函数),编译它们并使用Boost. Python导入编译后的代码(加上你得到更快的代码执行)。然后使用提到的任何工具来分发。

是的,可以将Python脚本编译为独立的可执行文件。

PyInstaller可用于将Python程序转换为windowsLinuxmacosxFreeBSDSolarisAIX下的独立可执行文件。它是推荐的转换器之一。

py2exe将Python脚本转换为仅在Windows平台上可执行的文件。

Cython是Python编程语言和扩展Cython编程语言的静态编译器。

我听说PyRun也是一个选项。它目前支持Linux、FreeBSD和Mac OS X。

使用PyInstaller,我发现了一个更好的方法,使用快捷方式到. exe而不是制作--onefile。无论如何,可能有一些数据文件,如果你运行的是基于站点的应用程序,那么你的程序也依赖于超文本标记语言,JavaScript和CSS文件。将所有这些文件移动到某个地方没有任何意义…相反,如果我们向上移动工作路径怎么办?

创建EXE文件的快捷方式,将其移动到顶部并将目标和起始路径设置为指定的路径,使相对路径指向dist\文件夹

Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exeStart in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\"

我们可以将快捷方式重命名为任何内容,因此重命名为“GTFS-Manager”。现在,当我双击快捷方式时,就好像我python运行了该文件!我发现这种方法比--onefile 更好:

  1. 在onefile的情况下,Windows 7操作系统缺少. dll存在问题,需要一些事先安装等。打哈欠。使用通常的带有多个文件的构建,没有这样的问题。
  2. 我的Python脚本使用的所有文件(它部署了一个龙卷风Web服务器,需要一个完整的网站价值的文件在那里!)不需要移动到任何地方:我只是在顶部创建快捷方式。
  3. 我实际上可以在ubuntu(运行python3 myfile.py)和Windows(双击快捷方式)上使用完全相同的文件夹。
  4. 我不需要为. spec文件的过于复杂的黑客攻击而烦恼,以包含数据文件等。

哦,记得在构建后删除构建文件夹。它会节省大小。

我喜欢PyInstaller-特别是“窗口”变体:

pyinstaller --onefile --windowed myscript.py

它将创建一个单独的*. exe文件在一个文件夹中。

pyinstaller yourfile.py -F --onefile

这将在Windows上创建一个独立的EXE文件。

重要提示1:EXE文件将在名为“dist”的文件夹中生成。

重要提示2:不要忘记--onefile标志

您可以使用pip install PyInstaller安装PyInstaller

在此处输入图片描述

在此处输入图片描述

注意:在极少数情况下,存在隐藏的依赖项……因此,如果您运行EXE文件并获得丢失的库错误(在下面的示例中为win32timezone),请使用以下内容:

pyinstaller --hiddenimport win32timezone -F "Backup Program.py"

由于目前的答案列表中似乎缺少它,我认为值得一提的是,标准库包括一个zipapp模块,可以用于此目的。它的基本用法只是将一堆Python文件压缩成扩展名为.pyz的zip文件,可以直接作为python myapp.pyz执行,但你也可以从requirements.txt文件制作一个自包含的包:

$ python -m pip install -r requirements.txt --target myapp$ python -m zipapp -p "interpreter" myapp

其中interpreter可以类似于/usr/bin/env python(参见指定解释器)。

通常,生成的.pyz/.pyzw文件应该是可执行的,在Unix中是因为它被标记为可执行的,在Windows中是因为Python安装通常会注册这些扩展名。然而,只要用户在路径中有python3.dll创建一个Windows可执行文件就应该工作相对容易。

如果您不想要求最终用户安装Python,您可以将应用程序与可嵌入的Python包一起分发。