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

时间:2011-03-28 11:04:10

标签: python executable

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

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

19 个答案:

答案 0 :(得分:192)

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

  

PyInstaller快速入门

     

从PyPI安装PyInstaller:

pip install pyinstaller
     

转到程序目录并运行:

pyinstaller yourprogram.py
     

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

     

有关更详细的演练,请参阅manual

答案 1 :(得分:189)

您可以使用已经回答的py2exe并使用cython转换.py中的密钥.pyc文件,C编译文件,例如Windows中的.dll和Linux中的.so一样,比常见的.pyo.pyc文件更难恢复(并且还可以获得性能!)

答案 2 :(得分:74)

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

如果您使用它,您可能也会获得性能提升。推荐使用。

答案 3 :(得分:25)

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

答案 4 :(得分:23)

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

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

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

在我看来,这要好得多,因为:

  • 更容易使用。

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

pyinstaller.exe --onefile MyCode.py

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

答案 5 :(得分:20)

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

PyInstaller可用于将Python程序转换为独立的可执行文件,位于 Windows Linux Mac OS X 下, FreeBSD Solaris AIX 。它是推荐的转换器之一。

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

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

答案 6 :(得分:17)

你可能会喜欢py2exe。你也会在那里找到在linux上做这件事的信息

答案 7 :(得分:13)

使用py2exe ....使用下面的设置文件:

 from distutils.core import setup
 import py2exe

 from distutils.filelist import findall
 import 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()
     )

答案 8 :(得分:9)

我还建议pyinstaller 为了更好的向后兼容性,如python 2.3 - 2.7。
对于 py2exe ,你必须有python 2.6

答案 9 :(得分:8)

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

对于python 2.x我建议使用pyinstaller,因为它可以将python程序打包在一个可执行文件中,这与CxFreeze不同,后者也输出库。

答案 10 :(得分:7)

pyinstaller yourfile.py -F --onefile

这将在Windows中创建一个独立的EXE文件 重要说明1:exe文件将在名为“ dist”的文件夹中生成 重要说明2:不要忘记--onefile标志

您可以使用pip install PyInstaller

安装pyinstaller

enter image description here

enter image description here

答案 11 :(得分:6)

您可以找到@ https://wiki.python.org/moin/DistributionUtilities列出的分发实用程序列表。

我使用bbfreeze并且它一直运行良好(但仍然支持python 3)。

答案 12 :(得分:6)

py2exe将生成您想要的exe文件,但您需要在您将要使用新exe的机器上安装相同版本的MSVCR90.dll。有关详细信息,请参阅http://www.py2exe.org/index.cgi/Tutorial

答案 13 :(得分:4)

不完全是python代码的打包,但现在还有来自google的grumpy,它将代码转换为Go。它不支持python C api,因此它可能不适用于所有项目。

答案 14 :(得分:2)

使用Cython转换为c,编译并与gcc链接。另一个可能是,使c中的核心函数(你想要反转的那些),编译它们并使用python boost来导入已编译的代码(加上你得到更快的代码执行)。然后使用提到的任何工具进行分发。

答案 15 :(得分:2)

使用pyinstaller,我找到了一个更好的方法,使用.exe的快捷方式而不是--onefile。无论如何,可能有一些数据文件,如果您正在运行基于站点的应用程序,那么您的程序也依赖于html,js,css文件。没有必要将所有这些文件移动到某处...而是如果我们移动工作路径的话。

创建exe的快捷方式,将其移到顶部并按指定设置目标和启动路径,使相对路径转到dist \ folder: Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\" 可以将快捷方式重命名为任何内容,以便重命名为" GTFS-Manager"
现在,当我双击快捷方式时,就像我运行python一样!我发现这种方法比--onefile更好:

  1. 在onefile的情况下,win7操作系统缺少.dll的问题,需要先安装等等。打哈欠。通常使用多个文件构建,没有这样的问题。
  2. 我的python脚本使用的所有文件(它正在部署龙卷风网络服务器,需要一个完整的网站,并且需要将文件放在那里!)不需要移动到任何地方:我只是在顶部创建快捷方式。
  3. 我实际上可以在ubuntu(运行python3 myfile.py)和windows(双击快捷方式)中使用这个完全相同的文件夹。
  4. 我不需要为过于复杂的.spec文件攻击而烦恼,以包含数据文件等。
  5. 哦,记得在构建后删除build文件夹,将保存大小。

答案 16 :(得分:1)

我被告知PyRun https://www.egenix.com/products/python/PyRun/也是一种选择。

答案 17 :(得分:1)

我喜欢pyinstaller-尤其是“窗口式”变体:

pyinstaller --onefile --windowed myscript.py

它将在dist /文件夹中创建一个* .exe文件。

答案 18 :(得分:1)

由于当前答案列表中似乎缺少该功能,因此我认为值得一提的是,标准库包含一个zipapp模块,可用于此目的。它的基本用法是将一堆Python文件压缩为扩展名为.pyz的zip文件,然后直接以python myapp.pyz的身份执行,但是您也可以使用{{1} }文件:

requirements.txt

$ python -m pip install -r requirements.txt --target myapp $ python -m zipapp -p "interpreter" myapp 可能类似于interpreter(请参阅Specifying the Interpreter)。

通常,生成的/usr/bin/env python / .pyz文件应该是可执行文件,在Unix中因为它被标记为这样,而在Windows中则是可执行的,因为Python安装通常会注册这些扩展名。但是,只要用户在路径中有.pyzwmake a Windows executable就可以正常工作。

如果您不希望最终用户安装Python,则可以将应用程序与the embeddable Python package一起分发。