build – Is there a way to compile a python application into static binary?
build – Is there a way to compile a python application into static binary?
There are two ways you could go about to solve your problem
- Use a static builder, like freeze, or
pyinstaller
, orpy2exe
- Compile using
cython
I will explain how you can go about doing it using the second, since the first method is not cross platform and version, and has been explained in other answers. Also, using programs like pyinstaller typically results in huge file sizes, where as using cython will result in a file thats KBs in size
First, install cython
. Then, rename your python file (say test.py
) into a .pyx
file
sudo pip install cython
mv test.py test.pyx
Then, you can use cython
along with GCC to compile it (cython
generates a C file out of a Python .pyx
file, and then GCC compiles the C file)
(in reference to https://stackoverflow.com/a/22040484/5714445)
cython test.pyx --embed
gcc -Os -I /usr/include/python3.5m -o test test.c -lpython3.5m -lpthread -lm -lutil -ldl
NOTE: Depending on your version of python, you might have to change the last command. To know which version of python you are using, simply use
$ python -V
You will now have a binary file test, which is what you are looking for
Other things to note:
- Cython is used to use C-Type Variable definitions for static memory allocation to speed up Python programs. In your case however, you will still be using traditional Python definitions.
- If you are using additional libraries (like
opencv
, for example), you might have to provide the directory to them using-L
and then specify the name of the library using-l
in the GCC Flags. For more information on this, please refer to GCC flags
You might wish to investigate Nuitka. It takes python source code and converts it in to C++ API calls. Then it compiles into an executable binary (ELF on Linux). It has been around for a few years now and supports a wide range of Python versions.
You will probably also get a performance improvement if you use it. Recommended.
build – Is there a way to compile a python application into static binary?
Youre probably looking for something like Freeze, which is able to compile your Python application with all its libraries into a static binary: