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


118

我需要将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
看到它的教程
Ashwini Chaudhary

为了完整起见cx_Freeze是可以用于此目的的另一个工具(以及PyInstaller和py2exe,其他答案已经提到)。
Thomas K

Answers:


63

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

这是一个相当容易使用PyInstaller解决当前问题的方法:

pyinstaller oldlogs.py

从该工具的文档中:

PyInstaller分析myscript.py并执行以下操作:

  • 在脚本所在的文件夹中写入myscript.spec。
  • 如果脚本不存在,则在与脚本相同的文件夹中创建文件夹。
  • 在构建文件夹中写入一些日志文件和工作文件。
  • 如果脚本不存在,则在与脚本相同的文件夹中创建文件夹dist。
  • 将myscript可执行文件文件夹写入dist文件夹。

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


9
cx_Freeze更好,它甚至支持python 3.3。
Ashwini Chaudhary 2012年

嘿,这甚至可以与wine一起使用,至少需要支持Windows XP的python 3.4或更高版本。非常好!我在Fedora Linux机器上使用winepython 3.4pip-Win创建了Windows可执行文件(只需遵循pyinstaller网站上的安装说明)。
erik

3
@AshwiniChaudhary,两者似乎都是跨平台的..但是,如果我不得不根据GitHub星快速判断要使用哪一个,则有〜4000 PyInstaller颗星,cx_Freeze有200颗星。因此PyInstaller似乎更受欢迎,并且可能涵盖了更多的边缘案例。 您为什么认为cx_FreezePyInstaller呢?
alpha_989 '18

请注意,与PyInstaller相比,“ cx_Freeze不支持构建单个文件exe,在该文件中,应用程序的所有库都嵌入在一个可执行文件中。” cx-freeze.readthedocs.io/en/latest/...
泰勒Edmiston的

12

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

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

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

utils/Build.py oldlogs.spec

这里可以找到更多


1
# -*- 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 )
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.