Pythonファイルをコンパイルする方法は?


57

私はpythonの学習を開始し、Ubuntuの新しいユーザーでもあります。.pyファイルをコンパイルする方法を知る必要があります。私はコマンドで試しました

python "hello.py"

Pythonをコンパイルする他の方法は何ですか?

回答:


58

Bryanの答えに加えて、単にターミナルからファイルまたはファイルの束をコンパイルしたい場合、py_compileモジュールは次の方法でスクリプトとして実行できます。

python -m py_compile fileA.py fileB.py fileC.py ...


9
速度が必要なためにコンパイルする場合は、「基本的な最適化を有効にする」-Oなどのフラグを追加することもできますpython -O -m py_compile …。主にassertステートメントとif __debug__コードを削除するため、ほとんどのコードでは効果がありません。詳細についてはman python「Pythonの最適化とは...」を参照してください。
ロリーオケイン14年

26

また、ファイルをコンパイルして実行する必要がないことにも注意してください.py。Pythonはインタープリター言語であり、次のいずれかを使用してスクリプトを直接実行できます。

python hello.py

または、スクリプト#!/usr/bin/env pythonの先頭に追加してスクリプトを実行可能にし、ファイルを実行可能にしてchmod +x hello.pyから実行します:

./hello.py

Python がパフォーマンス上の理由で.pyスクリプトをバイトコード.pycファイルに内部的にコンパイルするという事実は実装の詳細であり、そうする強い理由がない限り、コンパイルするタイミングとタイミングをPython自身に決定させます。


これがなぜ機能するのかについて私は混乱しています。Pythonインタープリターは、実行するためにスクリプトを読み取れる必要はありませんか?実行権限のみを付与する場合(chmod +x)、インタープリターはどのようにスクリプトを読み取りますか?
yellow01

@ yellow01:「shebang」を含むスクリプトを実行すると、つまり、最初の行がで始まる#!/path/to/interpreter場合、カーネルは実際にそこで宣言されているものを実行し、スクリプトパスを引数として渡します。私の例では、実行./hello.pyすると実際に実行されるのは/usr/bin/env python ./hello.pyです。参照en.wikipedia.org/wiki/Shebang_(Unix)
MestreLion

@ yellow01そうです、MestreLionが説明するプロセスを経てインタープリターが開始されたら、読み取り許可が必要になるということです。ただし、chmod +x付与は実行され、既存の権限に影響を与えないため、おそらく実行可能に加えて読み取り可能です。
スペクトル

11

このリンクをチェックしてくださいPythonでコンパイル

ページの中央で、インポート可能なpy_compileモジュールについて説明しています。構文は次のとおりです。

import py_compile

py_compile.compile("file.py")

このコンパイル方法では、python file.pyを実行する場合のようにモジュールは実行されません。

ディレクトリツリー全体をコンパイルするメソッドもありますが、リンクがどのように実行されるかを確認してみましょう。

お役に立てれば。



4

さまざまな方法を使用してPythonスクリプトをバイナリコードにコンパイルできますが、Nuitkaを使用する方が効率的であることがわかりました。

Nuitkaは、PythonのほとんどすべてのバージョンをサポートするPython-to-C ++コンパイラです。

コマンド構文は次のように簡単です

nuitka hello.py

後藤http://nuitka.net/doc/user-manual.html詳細については。


6
より効率的な方法は?なぜ誰もがそれを使用したいのでしょうか?
ムル

nuitkaは確かに非常に便利です。たとえば、PythonがインストールされていないコンピューターにPythonプログラムを出荷できます。しかし、nuitkaはPythonプログラムをC ++マシンコードにコンパイルするため、これを回避できます。
user258532
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.