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

How to make a Python script standalone executable to run without ANY dependency?

我正在构建一个python应用程序,不想强迫我的客户机安装python和模块。我还想使我的应用程序关闭源代码。

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


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

PyInstaller Quickstart

Install PyInstaller from PyPI:

1
pip install pyinstaller

Go to your program’s directory and run:

1
pyinstaller yourprogram.py

This will generate the bundle in a subdirectory called dist.

For a more detailed walkthrough, see the manual.


您可以使用已应答的py2exe,并使用cython转换您的密钥.py文件(在.pyc中)、c编译的文件(如在Windows中的.dll文件和在Linux中的.so文件),这比普通.pyo.pyc文件更难还原(同时也提高了性能!)


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

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


第三种选择是cx_Freeze,即跨平台。


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

我用过Py2Exe,它很管用,但我有一些问题。

  • 它显示了在64位Windows中创建单个文件的一些问题:使用bundle_files=1和py2exe不起作用;

  • 必须创建一个setup.py文件才能使其正常工作。http://www.py2exe.org/index.cgi/tutorial步骤2;

  • 我在依赖性方面遇到了一些问题,您必须通过在安装文件中导入包来解决这些问题;

  • 我不能让它和Pyqt一起工作。

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

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

  • 它更容易使用。

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

1
pyinstaller.exe --onefile MyCode.py
  • 您可以创建单个文件,以及其他选项(https://pyinstaller.readthedocs.io/en/stable/usage.html选项)。

  • 我在使用pyinstaller和多处理包时只有一个问题,通过使用这个方法解决了:https://github.com/pyinstaller/pyinstaller/wiki/recipe-multiprocessing。

所以,我认为,至少对于Python2.7来说,一个更好更简单的选项是pyinstaller。


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

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

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

Cython是一种静态编译器,适用于Python编程语言和扩展Cython编程语言。


你可能喜欢Py2Exe。你也可以在那里找到在Linux上做这件事的信息。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 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()
     )


我也推荐PyInstaller以获得更好的向后兼容性,如python 2.3-2.7。对于py2exe,您必须使用python 2.6


对于python 3.2脚本,唯一的选择是cxfreeze。从源代码构建它,否则它将不起作用。

对于python 2.x,我建议使用pyinstaller,因为它可以将一个python程序打包为一个可执行文件,而不象cxfreeze那样输出库。


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

我使用bbfreeze,它一直工作得很好(不过还没有获得python 3的支持)。


py2exe将生成所需的exe文件,但您需要在要使用新exe的计算机上具有相同版本的msvcr90.dll。有关详细信息,请参阅http://www.py2exe.org/index.cgi/tutorial。


这不完全是Python代码的打包,但现在Google也有了不满情绪,这使得代码消失了。它不支持python c api,因此可能不适用于所有项目。


使用cython转换为c,编译并与gcc链接。另一种可能是,在C语言中生成核心函数(您希望使其难以逆转),编译它们,并使用python boost导入已编译的代码(另外,您可以更快地执行代码)。然后使用上面提到的任何工具进行分发。


使用pyinstaller,我找到了一个更好的方法,使用.exe的快捷方式,而不是生成--onefile。不管怎样,可能周围有一些数据文件,如果您运行的是基于站点的应用程序,那么您的程序也依赖于HTML、JS和CSS文件。把所有这些文件移到某个地方毫无意义。相反,如果我们把工作路径向上移动呢?

创建一个指向该exe的快捷方式,将其移动到顶部,然后设置目标并按指定的路径开始,以使相对路径指向distfolder:
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管理器"现在,当我双击快捷方式时,就好像我是用python运行文件一样!我发现这种方法比--onefile方法好,因为:

  • 在OneFile的例子中,有一个问题是Win7OS缺少一个.dll,它需要一些预先安装等。对于通常包含多个文件的构建,没有这样的问题。
  • 我的python脚本使用的所有文件(它正在部署一个Tornado Web服务器,需要一个完整的Freakin网站价值的文件!)不需要移动到任何地方:我只需在顶部创建快捷方式。
  • 实际上,我可以在Ubuntu(run python3 myfile.py)和Windows(双击快捷方式)中使用这个完全相同的文件夹。
  • 我不需要为包含数据文件等的.spec文件的过于复杂的黑客行为操心。
  • 哦,记住在建房后删除建房文件夹,会节省空间。


    我听说皮伦,https://www.egenix.com/products/python/pyrun/,也是一种选择。


    我喜欢PyInstaller——尤其是"窗口"变体:

    1
    pyinstaller --onefile --windowed myscript.py

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