131

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

4

4 回答 4

71

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

以下是如何相当容易地使用 PyInstaller 来解决手头的问题:

pyinstaller oldlogs.py

从工具的文档中:

PyInstaller 分析 myscript.py 并:

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

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

于 2012-09-09T14:02:04.560 回答
14

我推荐PyInstaller,一个简单的 python 脚本可以通过以下命令转换为 exe:

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

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

utils/Build.py oldlogs.spec

更多可以在这里找到

于 2012-09-09T15:45:04.833 回答
5

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

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

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

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

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

于 2020-12-21T23:06:06.360 回答
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 )
于 2019-01-23T16:58:55.583 回答