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

时间:2012-09-09 13:54:05

标签: python compilation executable

我需要将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文件?

6 个答案:

答案 0 :(得分:52)

或使用PyInstaller替代py2exe。这是一个很好的starting point。 PyInstaller让你也为linux和mac创建可执行文件......

答案 1 :(得分:10)

您需要py2exe。阅读Tutorial

答案 2 :(得分:8)

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

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

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

utils/Build.py oldlogs.spec

可以找到更多here

答案 3 :(得分:6)

为了完整性,cx_Freeze是您可以使用的另一个工具(与PyInstaller和py2exe一起,其他答案已经提到过)。

答案 4 :(得分:3)

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

它是一个 rust 实用程序,其工作方式与 pyinstaller 的某些方式相同,但具有一些额外的功能,详细说明 here,总结一下关键功能:

  • 默认情况下所有软件包的单个二进制文件能够将模块零拷贝加载到内存中,而 pyinstaller 在使用 onefile 模式时将它们解压缩到临时目录
  • 能够生成静态链接的二进制文件

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

总体来说pyinstaller比PyOxidizer使用起来简单很多,PyOxidizer往往需要一些复杂的配置文件,而且Pythony较少,因为它是用Rust编写的,并且使用了Python世界不太熟悉的配置文件格式,但是PyOxidizer做了一些更高级的东西,特别是如果您希望生成单个二进制文件(这不是 pyinstaller 的默认设置)。

答案 5 :(得分:0)

# -*- 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 )