【问题标题】:Packaging a Python script on Linux into a Windows executable将 Linux 上的 Python 脚本打包成 Windows 可执行文件
【发布时间】:2011-02-26 09:59:20
【问题描述】:

我有一个 Python 脚本,我想将它编译成 Windows 可执行文件。现在,py2exe 在 Windows 上运行良好,但我希望能够在 Linux 上运行它。我确实在我的开发机器上安装了 Windows,但 Linux 是我的主要开发平台,我有点厌倦了重新启动到 Windows 来创建.exe。我也不想购买第二个 Windows 许可证才能在 VirtualBox 等虚拟机中运行。有什么想法吗?

PS:我知道py2exe 并不像使用 Python 解释器打包脚本那样准确地编译 python 文件。但无论哪种方式,结果都是您不需要安装 Python 来运行脚本。

【问题讨论】:

  • 当我需要 Windows 专用的东西(例如 IE 或测试 NSIS 安装包)时,我使用带有 Windows 的虚拟机; Virtualbox 运行良好,无需重新启动。当然,这只是回避问题。
  • 啊,但是技术上你需要两个 Windows 许可证...
  • 是吗?为何如此?就我而言,主机操作系统不是 Windows,只有来宾是。
  • @Piskvor 为了不需要两个许可证,一个用于裸机,一个用于 VirtualBox,提问者必须首先从裸机卸载 Windows 并将其安装在 VirtualBox 中。我不确定 OEM 许可证是否允许这样做。
  • OEM 许可要求从何而来?我没有看到问题中提到;不要假设太多。

标签: python linux windows py2exe


【解决方案1】:

正如其他回答者所说,自1.5 以来,交叉编译功能已从PyInstaller 中删除。在这里,展示如何使用PyInstallerwine 下从 Python 脚本打包 Windows 可执行文件。

第 1 步:安装 wine 和 Python

sudo apt-get install wine
wine msiexec /i python-2.7.10.msi /L*v log.txt

PS:

  • 较新的 Python 版本已经包含pip(用于安装pyinstaller)。从here下载Python安装包(如python-2.7.10.msi

  • 对于 macos 用户,请使用brew cask install xquartz wine-stable

第 2 步:在 wine 上安装 PyInstaller

$ cd ~/.wine/drive_c/Python27
$ wine python.exe Scripts/pip.exe install pyinstaller

Successfully installed pyinstaller-3.1.1 pypiwin32-219

第 3 步:打包 Python 脚本

使用 pyinstaller 打包 Python 脚本(例如,HelloWorld.py)。

$ wine ~/.wine/drive_c/Python27/Scripts/pyinstaller.exe --onefile HelloWorld.py

# filename: HelloWorld.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print('Hello World!')

Windows 可执行文件位于dist/

$ wine dist/HelloWorld.exe 
Hello World!
fixme:msvcrt:__clean_type_info_names_internal (0x1e24e5b8) stub

详细说明请参考here

【讨论】:

  • 您还必须在 wine 中安装所有依赖项(尽管您可能在 Ubuntu 中安装了它)。 确保您的应用程序使用命令运行 wine python appli.py
  • 现在没用了,因为没有办法在 wine 上安装 python 3
【解决方案2】:

你看PyInstaller了吗?

似乎 1.4 之前的版本支持交叉编译(1.5+ 中删除了支持)。请参阅this answer,了解如何在 Wine 下使用 PyInstaller 1.5+ 进行操作。

Documentation 说:

添加对交叉编译的支持:PyInstaller 现在能够在 Linux 下运行时构建 Windows 可执行文件。有关详细信息,请参阅文档。

我自己没试过。

希望对你有帮助

【讨论】:

  • @Chinmay:pyinstaller 的 pywin26 分支已合并到主干中。因此,如果您是胆大包天的人,您可以使用 svn co http://svn.pyinstaller.org/trunk pyinstaller-trunk 查看后备箱,它应该在 Windows 上与 2.6 一起使用。
  • 我会试试这个。直接的问题已通过重新启动到 Windows 得到解决,但是由于我几乎完全迁移到 Linux,这可能经常出现。感谢您的提醒!
  • 对于未来的访问者,这里是工作链接:groups.google.com/forum/?fromgroups#!topic/pyinstaller/…
  • 正如@hoju 提到的,这个特性从PyInstaller 1.5 开始被移除。请参阅pyinstaller.org/wiki/FAQ#Features:“在 1.4 版中,我们对此进行了一些支持,但它显示只能工作一半。它需要另一个分区上的一些 Windows 系统,并且只适用于纯 Python 程序。只要你想要一个不错的 GUI(gtk、qt、wx),无论如何你都需要安装 Windows 库。所以使用 Wine 会容易得多。”
【解决方案3】:

您可以在VirtualBox 中运行 Windows 以运行 py2exe。 VBox 提供了一个功能强大的命令行客户端来自动执行任务,因此您可以轻松地将它集成到您​​的开发过程中。

【讨论】:

  • 从技术上讲,这需要我拥有第二个 Windows 许可证,这是我宁愿不参与的事情。但无论如何 +1。
  • 或者如果你愿意,你可以使用 Windows 破解,仅用于测试目的
  • 你也可以买一台带windows的全新电脑
【解决方案4】:

我已经在 wine 中测试了 py2exe,它确实起作用了。你需要在 wine 中安装 python 才能工作,或者如果你只使用标准库,你可以将 py2exe 与 windows 机器上的 py2exe 捆绑在一起,然后在 wine 中使用它。请记住,您需要在 wine 中使用与用于编译 python 相同版本的 ms Visual C 库,否则将无法正常工作。

【讨论】:

    【解决方案5】:

    测试平台:Kubuntu 20.04、wine 6.0、python38

    下载wine和python

    1. https://www.python.org/downloads/release/python-3810/下载windows版本的python

    2. 安装酒 sudo apt install wine

    3. 打开终端并运行 wine the-python-exe-you-downloaded

    4. 运行 find ~/.wine -name pip.exe 这将为您提供 pip 路径:

    /home/yourusername/.wine/drive_c/users/yourusername/Local Settings/Application Data/Programs/Python/Python38/Scripts/pip.exe

    安装 pyinstaller

    运行wine /home/yourusername/.wine/drive_c/users/yourusername/Local\ Settings/Application\ Data/Programs/Python/Python38/Scripts/pip.exe install pyinstaller

    打包您的文件

    查找安装路径

    find ~/.wine -name pyinstaller.exe

    wine /home/yourusernmae/.wine/drive_c/users/yourusername/Local\ Settings/Application\ Data/Programs/Python/Python38/Scripts/pyinstaller.exe --onefile yourpythonfile

    【讨论】:

      【解决方案6】:

      我写了一个blog post 来说明如何使用 PyInstaller 做到这一点。总结如下:

      • 如何使用 PyInstaller 和 WINE 在 Linux 上为 Python 创建 EXE
        • 下载 Python 3.8 Windows 安装程序
        • wine python-3.8.9.exe,然后看下面的说明
        • wine C:/Python38/python.exe -m pip install --upgrade pip
        • wine C:/Python38/python.exe -m pip install -r requirements.txtrequirements.txt 应该包含 PyInstaller 本身
        • wine C:/Python38/Scripts/pyinstaller.exe ...
        • 全部完成!

      在 Wine 中安装 Python 3.8:

      1. 勾选“将 Python 3.8 添加到 PATH”
      2. 点击“自定义安装”
      3. 点击“下一步”
      4. 点击“为所有用户安装”
      5. 设置安装位置为C:\\Python38
      6. 点击“安装”
      7. 关闭窗口。

      请随时阅读帖子以获取更多详细信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多