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

2025-03-04 08:24:00
admin
原创
78
摘要:问题描述:我需要将 Python 脚本转换为 Windows 可执行文件。我已经安装了 Python 2.6 python26。我创建了一个脚本并将其保存在C:pythonscript。此文件夹中有两个文件Setup.py和oldlogs.py(此文件需要转换)setup.py代码是from distutil...

问题描述:

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

我已经安装了 Python 2.6 python26

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

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

setup.py代码是

from distutils.core import setup
import py2exe

setup(console=['oldlogs.py'])

如何将 oldlogs.py 转换为 exe 文件?


解决方案 1:

或者使用PyInstaller作为py2exe的替代品。这是一个很好的起点。PyInstaller 还允许您为 Linux 和 Mac 创建可执行文件...

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

pyinstaller oldlogs.py

来自该工具的文档:

PyInstaller 分析 myscript.py 并:

  • 将 myscript.spec 写入与脚本相同的文件夹中。

  • 如果不存在,则在与脚本相同的文件夹中创建一个文件夹。

  • 在构建文件夹中写入一些日志文件和工作文件。

  • 如果不存在文件夹 dist,则在与脚本相同的文件夹中创建一个文件夹。

  • 将 myscript 可执行文件夹写入 dist 文件夹。

在 dist 文件夹中,您可以找到分发给用户的捆绑应用程序。

解决方案 2:

我推荐PyInstaller,可以使用以下命令将简单的 python 脚本转换为 exe:

utils/Makespec.py [--onefile] oldlogs.py

它将创建一个 yourprogram.spec 文件,该文件是用于构建最终 exe 的配置。下一个命令将从配置文件构建 exe:

utils/Build.py oldlogs.spec

更多内容请点击此处

解决方案 3:

由于其他 SO 答案链接到这个问题,因此值得注意的是PyOxidizer现在还有另一种选择。

它是一个 rust 实用程序,其工作方式与 pyinstaller 相同,但是它还有一些附加功能,详见这里,总结一下主要功能:

  • 默认情况下,所有软件包都采用单一二进制文件,能够将模块零拷贝加载到内存中,而使用 pyinstalleronefile模式时,则需要将它们提取到临时目录中

  • 能够生成静态链接二进制文件

(另一个优点是,如果你在比目标系统更新的 glibc 版本上创建二进制文件,pyoxidizer它似乎不会受到pyinstaller 可能出现的问题的影响)。GLIBC_X.XX not found

总体而言,pyinstaller 比 PyOxidizer 更易于使用,后者通常需要在配置文件中添加一些复杂性,而且由于它是用 Rust 编写的,并且使用了 Python 世界中不太熟悉的配置文件格式,因此它的 Python 风格不太明显,但 PyOxidizer 可以做一些更高级的事情,特别是当你希望生成单个二进制文件时(这不是 pyinstaller 的默认设置)。

解决方案 4:

您可以使用 pyinstaller 来发布python脚本的单个二进制文件。

pyinstaller script.py --onefile

它发布包含单个二进制可执行文件的 dist 文件夹。

解决方案 5:

可以使用nuitka python 包,可以方便地从 PyPi 下载到 python 环境中:

pip install nuitka

注意:该软件包支持python 2.6-2.7,以及大多数python 3版本:3.4-3.12。

使用 Nuitka

<the_right_python> -m nuitka [options] <file_to_compile>

免责声明:Nuitka 创建可在任何具有相同操作系统的机器上运行的独立可执行文件(例如,Windows 到 Windows)。但是,在一个操作系统(例如 Windows)上编译的可执行文件将无法在另一个操作系统(例如 macOS)上运行。不支持针对不同操作系统进行交叉编译。

在运行时提供的众多选项中,最值得注意的是以下两个选项:

  • --standalone:允许可执行文件在不依赖其他机器的 Python 安装的情况下进行分发。这将创建一个新的分发文件夹,该文件夹必须与其他机器上的可执行文件一起发布;因为它包含源 Python 程序依赖项(例如 .dll 和 .pyd 文件)的高效、编译形式,因此该文件夹在生产设置中可能会变得非常大。

  • --onefile:创建一个分发文件夹,但会创建并使用压缩的可执行文件。如文档中所述:

--onefile 确实会创建一个文件,但在转向它之前,请确保独立文件能够正常工作,因为它只会使调试更加困难,例如在缺少数据文件的情况下。

项目选项:下面的示例展示了一种在正在编译的 Python 脚本中自定义运行时选项的巧妙方法。

# Compilation mode, support OS-specific options
# nuitka-project-if: {OS} in ("Windows", "Linux", "Darwin", "FreeBSD"):
#    nuitka-project: --onefile
# nuitka-project-else:
#    nuitka-project: --standalone
# The PySide6 plugin covers qt-plugins
# nuitka-project: --enable-plugin=pyside6
# nuitka-project: --include-qt-plugins=qml

项目选项中支持的一些变量包括:
IT科技

解决方案 6:

# -*- mode: python -*-

block_cipher = None

a = Analysis(['SCRIPT.py'],
             pathex=[
                 'folder path',
                 'C:\\Windows\\WinSxS\†_microsoft-windows-m..namespace-downlevel_31bf3856ad364e35_10.0.17134.1_none_50c6cb8431e7428f',
                 'C:\\Windows\\WinSxS\†_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 )
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3592  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2442  
  敏捷每日站会作为敏捷项目管理中的关键环节,对于提升产品生命周期管理(PLM)效率有着不可忽视的作用。PLM涵盖了产品从概念产生到最终报废的全过程管理,涉及众多环节与人员,而每日站会能够通过优化沟通机制,让信息在团队中快速、准确地流动,从而推动整个PLM流程更加顺畅、高效。接下来,我们将深入探讨如何通过四步优化沟通机制,...
plm系统   17  
  在企业的发展进程中,产品生命周期管理(PLM)项目管理至关重要,而数据驱动决策则是提升PLM项目管理效能的关键手段。通过运用合适的分析模型,企业能够从海量数据中挖掘有价值的信息,为决策提供有力支撑,进而优化产品全生命周期的各个环节。以下将详细介绍助力PLM项目管理实现数据驱动决策的5大分析模型。需求分析模型需求分析是P...
plm系统功能介绍   19  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与运营中扮演着至关重要的角色。它涵盖了从产品概念设计到退役的全流程管理,确保产品数据的有效整合与协同。然而,在复杂多变的商业环境中,黑天鹅事件随时可能降临,给企业带来难以预估的冲击。这些意外事件具有不可预测性、极大的影响力和事后的可解释性等特点,会对PLM系统的正常运...
plm系统的主要功能模块   16  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用