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

那么,是否有一种方法可以将Python脚本编译为独立的可执行文件?


你可能喜欢py2exe。您还可以在其中找到在Linux上执行此操作的信息。


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

PyInstaller Quickstart Install PyInstaller from PyPI: pip install pyinstaller Go to your program’s directory and run: pyinstaller yourprogram.py This will generate the bundle in a subdirectory called dist. pyinstaller -F yourprogram.py Adding -F (or --onefile) parameter will pack everything into single "exe". pyinstaller -F --paths=<your_path>\Lib\site-packages yourprogram.py running into "ImportError" you might consider side-packages. pip install pynput==1.6.8 still runing in Import-Erorr - try to downgrade pyinstaller - see Getting error when using pynput with pyinstaller For a more detailed walkthrough, see the manual.


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


您可以使用py2exe,并使用Cython将密钥的.py文件转换为.pyc, C编译文件,如Windows中的.dll和Linux中的.so。

它比普通的.pyo和.pyc文件更难恢复(而且性能也有所提高!)。


对于Python 3.2脚本,唯一的选择是cx_Freeze。从资源中构建;否则行不通。

对于Python 2。我建议使用PyInstaller,因为它可以将Python程序打包到一个可执行文件中,而不像cx_Freeze那样输出库。


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

对于py2exe,你必须有Python 2.6。


你可能想调查一下努伊特卡。它接受Python源代码并将其转换为c++ API调用。然后将其编译成可执行二进制文件(Linux上的ELF)。它已经存在了几年,并且支持广泛的Python版本。

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


使用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()
)

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

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


您可以在“分布实用程序”中找到列出的分布实用程序列表。

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


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

我已经使用py2exe,它工作,但我有一些问题。

它已经显示了在Windows 64位中创建单个文件的一些问题:使用py2exe使用bundle_files = 1不起作用; 有必要创建一个setup.py文件以使其工作。http://www.py2exe.org/index.cgi/Tutorial步骤2; 我有依赖关系的问题,你必须通过导入安装文件中的包来解决; 我不能让它与PyQt一起工作。

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

在我看来,这样更好,因为:

它更容易使用。

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

pyinstaller.exe --onefile MyCode.py

在其他选项中,您可以创建单个文件(https://pyinstaller.readthedocs.io/en/stable/usage.html#options)。 我使用PyInstaller和多处理包时只有一个问题,通过使用这个配方解决了:https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing。

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


不完全是Python代码的打包,但现在也有来自谷歌的Grumpy,它将代码编译到Go。

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


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

另一种方法是,用C语言编写核心函数(那些你想要使其难以反转的函数),编译它们并使用Boost。Python导入编译后的代码(而且代码执行速度更快)。然后使用上面提到的任何工具进行分发。


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

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

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

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


我被告知PyRun也是一个选项。它目前支持Linux, FreeBSD和Mac OS X。


使用PyInstaller,我发现了一个更好的方法,使用快捷方式到.exe,而不是制作——onefile。无论如何,可能会有一些数据文件,如果你运行的是基于站点的应用程序,那么你的程序也依赖于HTML, JavaScript和CSS文件。把这些文件都搬到别的地方去没有任何意义。相反,如果我们向上移动工作路径呢?

为EXE文件创建一个快捷方式,将其移动到顶部,并设置目标和起始路径,以使相对路径进入dist\文件夹:

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更好,因为:

In onefile's case, there's a problem with a .dll missing for the Windows 7 OS which needs some prior installation, etc. Yawn. With the usual build with multiple files, no such issues. All the files that my Python script uses (it's deploying a tornado web server and needs a whole freakin' website worth of files to be there!) don't need to be moved anywhere: I simply create the shortcut at top. I can actually use this exact same folder on Ubuntu (run python3 myfile.py) and Windows (double-click the shortcut). I don't need to bother with the overly complicated hacking of .spec file to include data files, etc.

哦,记得在构建后删除构建文件夹。它将节省尺寸。


我喜欢PyInstaller——尤其是“windowed”版本:

pyinstaller --onefile --windowed myscript.py

它将在distination/文件夹中创建一个*.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

其中解释器可以是/usr/bin/env python(请参阅指定解释器)。

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

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