Python executables: py2exe or PyInstaller?
To create executable files (windows) I assume that we should use one of them: Py2exe or PyInstaller.
What are the difference between them?
Py2exe and PyInstaller both are wrappers but here are few differences that I noticed,
- Py2exe is compatible with python2.4+ including python3.0 & 3.1 whereas PyInstaller is currently, compatible with python 2.7 and 3.3–3.5
- As far I know, Py2exe didn't support signing whereas Pyinstaller has support for signing from version 1.4
- In PyInstaller it is easy to create one exe, By default both create a bunch of exes & dlls.
- In py2exe its easier to embed manifest file in exe, useful for run as administrator mode in windows vista and beyond.
- Pyinstaller is modular and has a feature of hooks to include files in the build that you like. I don't know about this feature in py2exe.
Hope this helps you in your decision making.
[Update] - It looks like PyInstaller is actively developed (https://github.com/pyinstaller/pyinstaller/) and released. py2exe is still using sourceforge and its release cycle is very random on pypi there is no build after 2014 and their code show development in 2017 as well (https://sourceforge.net/p/py2exe/svn/HEAD/tree/trunk/py2exe-3/py2exe/). So, I recommend using pyinstaller till the time py2exe stabilizes its release cycle in favor of developers.
From the message of the wikipedia,py2exe is not active for long time :
Stable release: 0.9.2.2 for Python 3 /; 21 October 2014; 0.6.9 for Python 2 /; 15 November 2008
So I advise to use the pyinstaller.....
But now the pyinstaller also meet the problemThe offical website of pyinstaller:
Help keeping PyInstaller alive: Maintaining PyInstaller is a huge amount of work. PyInstaller development can only continue if users and companies provide sustainable funding. See Funding PyInstaller for how to support PyInstaller.
There is a fork of py2exe that is being actively developed to support ongoing versions of Python, https://github.com/albertosottile/py2exe, currently at v0.9.3.2 which works with Python 3.7.
I've used it on a small project and it works as expected, producing a working executable. Download the correct version from the releases page and install with pip
.
Update 2020-11-06:
As per LolPython's comment, this fork now redirects to the official repo so use that instead:
https://github.com/py2exe/py2exe