我有一个Python脚本,我想编译成Windows可执行文件。现在,py2exe
可以在Windows中正常运行,但我希望能够从Linux运行它。我做在我的开发机器上安装了Windows,但Linux是我的主要开发平台,我有点厌烦重新启动到Windows只是为了创建.exe
。我也不想购买第二个Windows许可证以在VirtualBox等虚拟机中运行。有什么想法吗?
PS:我知道py2exe
并没有完全编译python文件,就像使用Python解释器打包脚本一样。但无论哪种方式,结果都是您不需要安装Python来运行脚本。
答案 0 :(得分:27)
正如其他回答者所提到的,自1.5
以来,交叉编译功能已从PyInstaller中删除。在这里,展示如何使用PyInstaller下的wine从Python脚本打包Windows可执行文件。
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
)
$ cd ~/.wine/drive_c/Python27
$ wine python.exe Scripts/pip.exe install pyinstaller
Successfully installed pyinstaller-3.1.1 pypiwin32-219
使用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
从 https://www.python.org/downloads/release/python-3810/ 下载 windows 版本的 python
安装wine
sudo apt install wine
打开你的终端并运行
wine the-python-exe-you-downloaded
运行
find ~/.wine -name pip.exe
这将为您提供 pip 路径:
/home/yourusername/.wine/drive_c/users/yourusername/Local Settings/Application Data/Programs/Python/Python38/Scripts/pip.exe
运行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