Question: Question:
Is there a way to compile a program written in Python 3 into an executable binary?
Instead of just compiling to bytecode (* .pyc), I want to translate it into machine language so that a third party can run the program without installing his Python implementation.
It would be nice to be able to work standalone as much as possible, including various libraries and the source code of his FFI destination.
If there are restrictions on the operating environment (OS, etc.) of the binary itself, please add it.
Answer: Answer:
List what you know. The usage is slightly different, so you may have to choose it depending on the situation.
PyInstaller
PyInstaller is a tool for fixing Python packages and making them stand-alone. It works by collecting dependent Python scripts and including them with the Python interpreter. As of March 2018, the last update is 2018.
Compatible with Windows, macOS, Linux, FreeBSD, Solaris and AIX.
py2exe
py2exe is an extension of Python's distutils that aims to allow Python scripts to run standalone. The detailed mechanism is written here . As of March 2018, the last update is 2014.
Only compatible with Windows. There is also a homepage here .
py2app
py2app is the macOS version of py2exe. As of March 2018, the last update is 2017.
Only compatible with macOS. Here is the documentation.
cx_Freeze
cx_Freeze is a tool aimed at cross-platform doing things like px2exe and his py2app. As of March 2018, the last update is 2018.
Compatible with Windows, macOS and Linux. Here is the documentation.
bbfreeze
bbfreeze is a tool similar to PyInstaller and cx_Freeze. As of March 2018, the last update was 2014 and it is stated that it is not maintained.
Nuitka
Nuitka is one of the Python compilers. Transpile Python to C and link it with libpython
to make it an executable. As of March 2018, the last update is 2018.
Compatible with Windows, macOS, Linux and FreeBSD. It also seems to support arm as well as x86 / x86_64.
Cython
Cython is a programming language designed to easily integrate extensions written in C into Python and is provided with a compiler. Unlike the ones above, it's not CPython based. Transpile Cython code, which has a syntax similar to Python, to C and compile it to create an executable file. As of March 2018, the last update is 2018.
Compatible with Windows, macOS and Linux. Here is the repository. The FAQ has instructions on how to create a standalone binary.
PyPy / RPython
PyPy is his JIT compiler for Python. Not based on CPython. For different purposes, you can compile a program written in RPython , a subset of Python, into an executable file (this mechanism is explained, for example, in this article by a third party). As of March 2018, the last update is 2018.
Specifically, you can compile using the repository pypy/rpython/bin/rpython
.
# test.py
import sys
def fib(n):
if n <= 2:
return 1
else:
return fib(n-1) + fib(n-2)
def entry_point(argv):
print fib(10)
return 0
def target(*args):
return entry_point, None
if __name__ == '__main__':
entry_point(10)
$ python2 ./pypy/rpython/bin/rpython ./test.py
[translation:info] 2.7.14 (default, Sep 23 2017, 22:06:14)
[GCC 7.2.0]
[platform:msg] Set platform with 'host' cc=None, using cc='gcc', version='Unknown'
[translation:info] Translating target as defined by ./test
[translation] translate.py configuration:
[translation] [translate]
targetspec = ./test
[translation] translation configuration:
[translation] [translation]
gc = incminimark
gctransformer = framework
list_comprehension_operations = True
withsmallfuncsets = 5
[translation:info] Annotating&simplifying...
[b] {translation-task
starting annotate
(中略)
[Timer] Total: --- 16.5 s
$ ./test-c
55
Compatible with Windows , macOS and Linux.
Although it is old, the following questions have also been posted in connection with it.
- Can PyPy / RPython be used to produce a small standalone executable? –Stack Overflow
- Compile PyPy to Exe –Stack Overflow
Shed Skin
Shed Skin is a transpiler from Python (a subset of) to C ++. Please note that Python 3 is not supported . Also, the standard library is not completely usable. As of March 2018, the last update is 2017.
Similar questions on other sites
- How to make a Python script standalone executable to run without ANY dependency? –Stack Overflow
- How to compile python script to binary executable –Stack Overflow