76

I have a Python script that I'd like to compile into a Windows executable. Now, py2exe works fine from Windows, but I'd like to be able to run this from Linux. I do have Windows on my development machine, but Linux is my primary dev platform and I'm getting kind of sick of rebooting into Windows just to create the .exe. Nor do I want to have to buy a second Windows license to run in a virtual machine such as VirtualBox. Any ideas?

PS: I am aware that py2exe doesn't exactly compile the python file as much as package your script with the Python interpreter. But either way, the result is that you don't need Python installed to run the script.

5
  • When I need something Windows-only (e.g. IE or testing NSIS install packages), I use a virtual machine with Windows; Virtualbox works great and no rebooting is necessary. Of course, this is just side-stepping the issue. Commented Jun 1, 2010 at 15:27
  • 2
    Ah, but technically you require two licences of Windows for this... Commented Jun 1, 2010 at 15:59
  • 3
    Do I? How so? The host OS is not Windows in my case, only the guest is. Commented Feb 23, 2012 at 11:04
  • @Piskvor In order to not need two licenses, one for bare metal and one for VirtualBox, the asker would have to first uninstall Windows from bare metal and install it in VirtualBox. I'm not sure whether an OEM license even allows that. Commented Aug 24, 2017 at 18:18
  • 1
    Where did an OEM license requirement come from? I see no mention in the question; do not assume too much. Commented Aug 24, 2017 at 18:23

7 Answers 7

47

As mentioned by other answerers, the cross-compilation feature is removed from PyInstaller since 1.5. Here, show how to package a Windows executable from Python scripts using PyInstaller under wine.

Step 1: Install wine and Python

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

PS:

  • Newer Python versions already include pip (is used to install pyinstaller). Download Python installation package from here (e.g., python-2.7.10.msi)

  • For macos users, use brew cask install xquartz wine-stable.

Step 2: Install PyInstaller on wine

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

Successfully installed pyinstaller-3.1.1 pypiwin32-219

Step 3: Package Python scripts

Package Python scripts (e.g., HelloWorld.py) with 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!')

The Windows executable file is located in dist/.

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

Refer to here for the detailed description.

Sign up to request clarification or add additional context in comments.

3 Comments

You will have to install all the dependencies in wine too (though you might have it in Ubuntu). Make sure that your application run using command wine python appli.py
Useless now since there is no way to install python 3 on wine
There is also a way to install python in wine if you have no .msi file askubuntu.com/questions/678277/how-to-install-python3-in-wine
23

Did you look at PyInstaller?

It seems that versions through 1.4 support cross-compilation (support was removed in 1.5+). See this answer for how to do it with PyInstaller 1.5+ under Wine.

Documentation says:

Add support for cross-compilation: PyInstaller is now able to build Windows executables when running under Linux. See documentation for more details.

I didn't try it myself.

I hope it helps

13 Comments

@Chinmay: there was a pywin26 branch of pyinstaller that has been merged into the trunk. So, if you are the daring kind of person, you can check out the trunk using svn co http://svn.pyinstaller.org/trunk pyinstaller-trunk and it should work with 2.6 on Windows.
I will give this a try. The immediate problem has been solved by rebooting into Windows, but this is likely to crop up fairly often now that I've moved almost completely over to Linux. Thanks for the heads-up!
For future visitors, here's the working link: groups.google.com/forum/?fromgroups#!topic/pyinstaller/…
As is mentioned by @hoju, this feature is removed from PyInstaller since 1.5. See pyinstaller.org/wiki/FAQ#Features: "In version 1.4 we had build in some support for this, but it showed to work only half. It would require some Windows system on another partition and would only work for pure Python programs. As soon as you want a decent GUI (gtk, qt, wx), you would need to install Windows libraries anyhow. So it's much easier to just use Wine."
|
5

I wrote a blog post on how to do this with PyInstaller. Here's the summary:

  • How to create EXEs for Python on Linux, using PyInstaller and WINE
    • Download Python 3.8 Windows installer
    • wine python-3.8.9.exe, then see instructions below
    • wine C:/Python38/python.exe -m pip install --upgrade pip
    • wine C:/Python38/python.exe -m pip install -r requirements.txt, and requirements.txt should include PyInstaller itself
    • wine C:/Python38/Scripts/pyinstaller.exe ...
    • All done!

Installing Python 3.8 in Wine:

  1. Check "Add Python 3.8 to PATH"
  2. Click "Customize installation
  3. Click "Next"
  4. Click "Install for all users"
  5. Set the install location as C:\\Python38
  6. Click "Install"
  7. Close the window.

Feel free to read the post to get more details.

Comments

4

Tested on Platform: Kubuntu 20.04, wine 6.0, python38

Download wine and python

  1. Download windows version of python from https://www.python.org/downloads/release/python-3810/

  2. Install wine sudo apt install wine

  3. Open your terminal and run wine the-python-exe-you-downloaded

  4. Run find ~/.wine -name pip.exe this will give you the pip path:

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

Install pyinstaller

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

Package your file

Find installation path

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

1 Comment

This is a very helpful answer to me because you have shown me how to find the wines pyinstaller.exe location. If anyone is still facing any issues while using this output location then please check if there is any file that contains spaces. Just enclose them with quotes and it will work nicely.
3

You could run Windows in VirtualBox in order to run py2exe. VBox offers a powerful command-line client for automating tasks, so it something that you could likely integrate into your development process with ease.

3 Comments

That would technically require me to have a second Windows licence, something I would rather not get involved in. But +1 anyway.
or you could use a crack for windows, if you want, just for test purpose
you could also buy a whole new computer with windows
2

I have tested py2exe inside of wine, and it does function. You'll need to install python in wine for it to work, or if you only use the standard libarary, you can bundle py2exe with py2exe from the windows machine and then use it in wine. Just keep in mind you need the same version of the ms visual C libraries in wine as were used to compile python or things won't work properly.

Comments

0

I works fine as kaptaan wrote above: https://stackoverflow.com/a/67857785/23262833

Tested on platform: Ubuntu 22.04, Wine 9.0, Python 3.12

Download wine 9.0 from winehq download page - https://wiki.winehq.org/Ubuntu (ubuntu repositories has available wine 6.0).

You can run Pyinstaller to build windows .exe app; You can run Innosetup to create an installer for your windows aplication.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.