如何将python脚本编译为二进制可执行文件

如何将python脚本编译为二进制可执行文件,python,compilation,executable,Python,Compilation,Executable,我需要将Python脚本转换为Windows可执行文件 我已将Python 2.6安装到python26 我创建了一个脚本,并将其保存在C:\pythonscript中。在这个文件夹中有两个文件 Setup.py和oldlogs.py(此文件需要转换) setup.py代码为 from distutils.core import setup import py2exe setup(console=['oldlogs.py']) 如何将oldlogs.py转换为exe文件?或用作。这是一个好主

我需要将Python脚本转换为Windows可执行文件

我已将Python 2.6安装到
python26

我创建了一个脚本,并将其保存在
C:\pythonscript
中。在这个文件夹中有两个文件

Setup.py
oldlogs.py
(此文件需要转换)

setup.py
代码为

from distutils.core import setup
import py2exe

setup(console=['oldlogs.py'])
如何将oldlogs.py转换为exe文件?

或用作。这是一个好主意。PyInstaller还允许您为linux和mac创建可执行文件

以下是如何使用PyInstaller轻松解决当前问题:

pyinstaller oldlogs.py
从工具的文档中:

PyInstaller分析myscript.py和:

  • 在与脚本相同的文件夹中写入myscript.spec
  • 如果不存在,则在与脚本相同的文件夹中创建文件夹生成
  • 在生成文件夹中写入一些日志文件和工作文件
  • 如果不存在,则在与脚本相同的文件夹中创建文件夹dist
  • 在dist文件夹中写入myscript可执行文件文件夹
在dist文件夹中,您可以找到分发给用户的捆绑应用程序

我建议使用以下命令将简单的python脚本转换为exe:

utils/Makespec.py [--onefile] oldlogs.py
它创建一个yourprogram.spec文件,该文件是用于生成最终exe的配置。下一个命令从配置文件生成exe:

utils/Build.py oldlogs.spec

更多信息可以找到

因为其他SO答案链接到这个问题,值得注意的是,现在还有另一个选项

这是一个rust实用程序,其工作方式与pyinstaller相同,但有一些额外的详细功能,以总结关键功能:

  • 默认情况下,所有包的单个二进制文件,能够将模块零拷贝加载到内存中,而pyinstaller在使用
    onefile
    模式时将模块提取到临时目录中
  • 生成静态链接二进制文件的能力
(PyOxizer的另一个优点是,如果您在GLIBC版本比目标系统更新的系统上创建二进制文件,pyinstaller似乎不会出现GLIBC_X.XX not found问题)


总的来说,pyinstaller比PyOxizer使用起来简单得多,PyOxizer通常需要配置文件中的一些复杂性,而且它不是Pythony,因为它是用Rust编写的,并且使用的配置文件格式在Python世界中不太常见,但PyOxizer做了一些更高级的事情,特别是如果您希望生成单个二进制文件(这不是pyinstaller的默认设置)。

请看它的完整性,这是另一个可以用于此目的的工具(以及pyinstaller和py2exe,其他答案已经提到)。的可能副本更好,它甚至支持python 3.3。嘿,这甚至可以与,至少达到支持Windows XP的python 3.4版。真的很棒!我用wine、python 3.4和pip Win(只需按照pyinstaller网站上的安装说明)在我的Fedora Linux机器上创建了一个windows可执行文件。@AshwiniChaudhary,两者似乎都是跨平台的。。然而,如果我必须根据
GitHub
stars快速判断使用哪一个,
PyInstaller
有大约4000个星,
cx\u Freeze
有200个星。因此,
PyInstaller
似乎更受欢迎,可能涵盖了更多的边缘案例。为什么您认为
cx\u Freeze
PyInstaller
好?请注意,与PyInstaller相比,“cx\u Freeze不支持构建单个文件exe,其中应用程序的所有库都嵌入到一个可执行文件中。”
# -*- mode: python -*-

block_cipher = None

a = Analysis(['SCRIPT.py'],
             pathex=[
                 'folder path',
                 'C:\\Windows\\WinSxS\\x86_microsoft-windows-m..namespace-downlevel_31bf3856ad364e35_10.0.17134.1_none_50c6cb8431e7428f',
                 'C:\\Windows\\WinSxS\\x86_microsoft-windows-m..namespace-downlevel_31bf3856ad364e35_10.0.17134.1_none_c4f50889467f081d'
             ],
             binaries=[(''C:\\Users\\chromedriver.exe'')],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='NAME OF YOUR EXE',
          debug=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )