42598


Python 3 で書かれたプログラムを、実行可能なバイナリにコンパイルする方法はありますか？  
単にバイトコード (*.pyc) へコンパイルするのではなく、機械語に翻訳するなどして、第三者が Python
処理系をインストールすることなくプログラムを動かせるようにしたいです。

各種ライブラリや FFI 先のソースコードを含めて、なるべくスタンド・アローンで動くようにできると良いです。  
バイナリ自体の動作環境 (OSなど) に制限があれば付記して頂ければと思います。


CC BY-SA 3.0
2018-03-23T04:32:33.247
42597
2023-06-18T22:28:46.360
2018-03-23T06:04:23.903
19110
19110
question
python python3 compiler
Python のプログラムを実行可能バイナリにコンパイルするには？


知っているものを列挙します。少しずつ用途が違うので、場合によって選ぶ必要があるでしょう。

## PyInstaller

[PyInstaller](https://www.pyinstaller.org/) は、Python
パッケージを固定し、スタンド・アローンで動かせるようにするためのツールです。依存している Python スクリプトを集め、Python
インタプリタと共に同梱することで動かします。2018年3月現在、最終更新は2018年です。

Windows、macOS、Linux、FreeBSD、Solaris および AIX に対応しています。

## py2exe

[py2exe](https://pypi.python.org/pypi/py2exe/) は、Python の
[distutils](https://docs.python.jp/3/library/distutils.html)
を拡張したツールであり、Python
スクリプトがスタンド・アローンで実行できるようにすることを目的としています。詳しい仕組みは[こちら](http://www.py2exe.org/index.cgi/FAQ)に書いてあります。2018年3月現在、最終更新は2014年です。

Windows のみに対応しています。[こちら](http://www.py2exe.org/)にもホームページがあります。

## py2app

[py2app](https://pypi.python.org/pypi/py2app/) は、py2exe の macOS
版です。2018年3月現在、最終更新は2017年です。

macOS のみに対応しています。[こちら](https://py2app.readthedocs.io/en/latest/)にドキュメントがあります。

## cx_Freeze

[cx_Freeze](https://anthony-tuininga.github.io/cx_Freeze/) は px2exe や py2app
相当のことをクロス・プラットフォームで行うことを目的としたツールです。2018年3月現在、最終更新は2018年です。

Windows、macOS および Linux に[対応しています](http://cx-
freeze.readthedocs.io/en/latest/faq.html#freezing-for-other-
platforms)。[こちら](http://cx-
freeze.readthedocs.io/en/latest/index.html)にドキュメントがあります。

## bbfreeze

[bbfreeze](https://pypi.python.org/pypi/bbfreeze/) は PyInstaller や cx_Freeze
と類似のツールです。2018年3月現在、最終更新は2014年であり、メンテナンスされていないことが明言されています。

## Nuitka

[Nuitka](http://nuitka.net/) は Python コンパイラの1つです。Python を C
にトランスパイルし、`libpython` とリンクすることで実行可能ファイルにします。2018年3月現在、最終更新は2018年です。

Windows、macOS、Linux および FreeBSD に[対応しています](http://nuitka.net/doc/user-
manual.html#requirements)。また、x86/x86_64 だけでなく arm にも対応しているようです。

## Cython

[Cython](http://cython.org/) は、C で書かれた拡張機能を簡単に Python
へ統合することを目的に作られたプログラミング言語であり、コンパイラが提供されています。上述のものたちとは違い、 **CPython
ベースではありません。** Python と類似した構文を持つ Cython コードを一旦 C
へトランスパイルし、それをコンパイルすることで実行可能ファイルを作ります。2018年3月現在、最終更新は2018年です。

Windows、macOS、Linux
に[対応しています](http://docs.cython.org/en/latest/src/quickstart/install.html)。[こちら](https://github.com/cython/cython)にリポジトリがあります。[FAQ](https://github.com/cython/cython/wiki/FAQ#how-
can-i-make-a-standalone-binary-from-a-python-program-using-cython)
にスタンド・アローンなバイナリを作る手順が載っています。

## PyPy / RPython

[PyPy](https://pypy.org/) は、Python の JIT コンパイラです。 **CPython ベースではありません。**
元々の目的とは異なりますが、Python のサブセットである
[RPython](https://rpython.readthedocs.io/en/latest/)
で書かれたプログラムを実行可能ファイルにコンパイルすることができます
(この仕組みはたとえば第三者の[こちらの記事](http://keens.github.io/blog/2017/12/12/rpythonnitsuitekaruku/)で解説されています)。2018年3月現在、最終更新は2018年です。

具体的には、[リポジトリ](https://bitbucket.org/pypy/pypy/overview)の
`pypy/rpython/bin/rpython` を使ってコンパイルができます。

[code]

    # 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)
    
[/code]

[code]

    $ 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
    
[/code]

[Windows](http://doc.pypy.org/en/latest/windows.html)、macOS および Linuxに対応しています。

古いですが、関連して以下の質問も投稿されています。

  * [Can PyPy/RPython be used to produce a small standalone executable?](https://stackoverflow.com/q/4251964/5989200) \-- Stack Overflow
  * [Compile PyPy to Exe](https://stackoverflow.com/q/10470800/5989200) \-- Stack Overflow

## Shed Skin

[Shed Skin](https://shedskin.github.io/) は、Python (のサブセット) から C++ へのトランスパイラです。
**Python 3 はサポートされていない**
ので注意してください。また、標準ライブラリも完全に使えるわけではないです。2018年3月現在、最終更新は2017年です。

## 他サイトでの類似質問

  * [How to make a Python script standalone executable to run without ANY dependency?](https://stackoverflow.com/q/5458048/5989200) \-- Stack Overflow
  * [How to compile python script to binary executable](https://stackoverflow.com/q/12339671/5989200) \-- Stack Overflow


CC BY-SA 3.0
2018-03-23T04:32:33.247
42598
2018-03-23T04:56:58.993
2018-03-23T04:56:58.993
19110
19110
42597
answer