How can I make a Python script standalone executable to run without ANY dependency?
You can use py2exe as already answered and use Cython to convert your key .py
files in .pyc
, C compiled files, like .dll
in Windows and .so
on Linux.
It is much harder to revert than common .pyo
and .pyc
files (and also gain in performance!).
Create a single executable from a Python project
There are several different ways of doing this.
The first -- and likely most common -- way is to use "freeze" style programs. These programs work by bundling together Python and your program, essentially combining them into a single executable:
PyInstaller:
Website || Repo || PyPi
Supports Python 3.7 - 3.10 on Windows, Mac, and Linux.
cx_Freeze:
Website || Repo || PyPi
Supports Python 3.6 - 3.10 on Windows, Mac, and Linux.
py2exe:
Website || Repo || PyPi
Supports Python 3.7 - 3.10 on Windows only.
py2app:
Website || Repo || PyPi
Supports Python 3.6 - 3.10 on Macs only.
The main thing to keep in mind is that these types of programs will generally only produce an exe for the operating system you run it in. So for example, running Pyinstaller in Windows will produce a Windows exe, but running Pyinstaller in Linux will produce a Linux exe. If you want to produce an exe for multiple operating systems, you will have to look into using virtual machines or something like Wine.
Of course, that's not the only way of doing things:
pynsist:
Website || Repo || PyPi
Pynsist will create a Windows installer for your program which will directly install Python on the user's computer instead of bundling it with your code and create shortcuts that link to your Python script.
The pynsist tool itself requires Python 3.5+ to run, but supports bundling any version of Python with your program.
Pynsist will create Windows installers only, but can be run from Windows, Mac, and Linux. See their FAQ for more details.
Nuitka:
Website || Repo (Github mirror) || PyPi
Nuitka will literally compile your Python code and produce an exe (as opposed to the other projects, which simply include Python) to try and speed up your code. As a side effect, you'll also get a handy exe you can distribute. Note that you need to have a C++ compiler available on your system.
Supports Python 2.6 - 2.7 and Python 3.3 - 3.10 on Windows, Mac, and Linux.
cython:
Website || Repo || PyPi
Cython is similar to Nuitka in that it is a Python compiler. However, instead of directly compiling your code, it'll compile it to C. You can then take that C code and turn your code into an exe. You'll need to have a C compiler available on your system.
Supports Python 2.7 and Python 3.3 - 3.11 on Windows, Mac, and Linux.
My personal preference is to use PyInstaller since it was the easiest for me to get up and running, was designed to work nicely with various popular libraries such as numpy or pygame, and has great compatibility with various OSes and Python versions.
However, I've also successfully built various exes using cx_Freeze without too much difficulty, so you should also consider trying that program out.
I haven't yet had a chance to to try pynist, Nuitka, or Cython extensively, but they seem like pretty interesting and innovative solutions. If you run into trouble using the first group of programs, it might be worthwhile to try one of these three. Since they work fundamentally differently then the Pyinstaller/cx_freeze-style programs, they might succeed in those odd edge cases where the first group fails.
In particular, I think pynist is a good way of sidestepping the entire issue of distributing your code altogether: Macs and Linux already have native support for Python, and just installing Python on Windows might genuinely be the cleanest solution. (The downside is now that you need to worry about targeting multiple versions of Python + installing libraries).
Nuitka and Cython (in my limited experience) seem to work fairly well. Again, I haven't tested them extensively myself, and so my main observation is that they seem to take much longer to produce an exe then the "freeze" style programs do.
All this being said, converting your Python program into an executable isn't necessarily the only way of distributing your code. To learn more about what other options are available, see the following links:
- https://packaging.python.org/overview/#packaging-python-applications
- https://docs.python-guide.org/shipping/packaging/#for-linux-distributions
Compiling python code into a single exe
My two cents: did you make a test using the debug
option of PyInstaller
?
Just update your specfile:
exe = EXE( pyz,
[...]
debug=True,
[...])
(Note: in order to avoid numerous message boxes, you may want to set console output: console=True
)
Maybe it would return some useful data. Please provide us with output in this case (if there's any).
According to the output you get, this is quite a common problem, because if PyInstaller resolves dependencies for your modules, dependencies of dependencies may be forgotten.
In your case, Tcl
is missing, and this is needed by some Tkinter
library: you should take a look here: Python, Pyinstaller creating shortcuts in windows
According to documentation:
Elaborating on Makespec.py, this is the supported command line: python Makespec.py [opts] [ ...] Where allowed OPTIONS are:
[...]
-K, --tk include TCL/TK in the deployment.
You may make a try with this argument, and check the impact on your spec
file. I bet it's an addition in the modules taken into account in Analysis or in the EXE function.
How can I make an EXE file from a Python program?
Auto PY to EXE - A .py to .exe converter using a simple graphical interface built using Eel and PyInstaller in Python.
py2exe is probably what you want, but it only works on Windows.
PyInstaller works on Windows and Linux.
Py2app works on the Mac.
Related Topics
Matplotlib: Draw Grid Lines Behind Other Graph Elements
Python Pandas Group by Date Using Datetime Data
How to Let a Raw_Input Repeat Until I Want to Quit
Finding a Substring Within a List in Python
@Csrf_Exempt Does Not Work on Generic View Based Class
Using Psycopg2 with Lambda to Update Redshift (Python)
How to Read a Column of CSV as Dtype List Using Pandas
How to Fix Character Constantly Accelerating in Both Directions After Deceleration Pygame
Real World Example About How to Use Property Feature in Python
List All Base Classes in a Hierarchy of Given Class
Multiplying Across in a Numpy Array
How to Flatten a List of Lists/Nested Lists
What Is the Best Approach to Change Primary Keys in an Existing Django App
How to Remove Leading Whitespace in Python
Value Error Trying to Install Python for Windows Extensions