将Linux上的Python脚本交叉编译为Windows可执行文件

时间:2010-06-01 15:18:31

标签: python windows linux py2exe cross-compiling

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

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

5 个答案:

答案 0 :(得分:27)

正如其他回答者所提到的,自1.5以来,交叉编译功能已从PyInstaller中删除。在这里,展示如何使用PyInstaller下的wine从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

第2步:在葡萄酒上安装PyInstaller

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

Successfully installed pyinstaller-3.1.1 pypiwin32-219

第3步:打包Python脚本

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

$ 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

答案 1 :(得分:15)

你看过PyInstaller吗?

1.4版本似乎支持交叉编译(1.5+中删除了支持)。有关如何使用Wine下的PyInstaller 1.5+,请参阅this answer

http://www.pyinstaller.org/browser/tags/1.4/doc/CHANGES.txt说:

  

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

我自己没试过。

我希望它有所帮助

答案 2 :(得分:4)

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

答案 3 :(得分:3)

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

答案 4 :(得分:0)

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

下载wine和python

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

  2. 安装wine 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