Pythonファイル拡張子、.pyc .pyd .pyoは何を表していますか?


435

これらのpythonファイル拡張子はどういう意味ですか?

  • .pyc
  • .pyd
  • .pyo

それらの違いは何ですか?それらはどのように* .pyファイルから生成されますか?

回答:


480
  1. .py:これは通常、作成した入力ソースコードです。
  2. .pyc:これはコンパイルされたバイトコードです。モジュールをインポートすると、Pythonは*.pycバイトコードを含むファイルを作成して、後で簡単に(そして高速に)インポートできるようにします。
  3. .pyo:これは、*.pyc最適化(-O)フラグを使用して作成されたファイルにPython 3.5以前で使用されていたファイル形式です。(下の注を参照)
  4. .pyd:これは基本的にWindows dllファイルです。http://docs.python.org/faq/windows.html#is-a-pyd-file-the-same-as-a-dll

また、.pycvsの詳細については.pyohttp//www.network-theory.co.uk/docs/pytut/CompiledPythonfiles.htmlをご覧ください(以下の重要な部分をコピーしました)。

  • -Oフラグを指定してPythonインタープリターを呼び出すと、最適化されたコードが生成され、「。pyo」ファイルに保存されます。現在、オプティマイザはあまり役に立ちません。それはassertステートメントを削除するだけです。-Oを使用すると、すべてのバイトコードが最適化されます。.pycファイルは無視され、.pyファイルは最適化されたバイトコードにコンパイルされます。
  • 2つの-OフラグをPythonインタープリター(-OO)に渡すと、バイトコードコンパイラーが最適化を実行し、まれにプログラムの誤動作を引き起こす可能性があります。現在__doc__、バイトコードから削除されるのは文字列のみであるため、よりコンパクトな「.pyo」ファイルになります。一部のプログラムはこれらを利用可能にすることに依存している可能性があるため、このオプションは、自分が何をしているかわかっている場合にのみ使用してください。
  • 「.pyc」または「.pyo」ファイルから読み取られたプログラムは、「。py」ファイルから読み取られたプログラムよりも速く実行されません。「.pyc」または「.pyo」ファイルの方が高速なのは、ファイルの読み込み速度だけです。
  • コマンドラインで名前を指定してスクリプトを実行すると、スクリプトのバイトコードが「.pyc」または「.pyo」ファイルに書き込まれることはありません。したがって、スクリプトのほとんどのコードをモジュールに移動し、そのモジュールをインポートする小さなブートストラップスクリプトを用意することで、スクリプトの起動時間を短縮できます。コマンドラインで直接「.pyc」または「.pyo」ファイルに名前を付けることもできます。

注意:

2015-09-15に、Python 3.5リリースはPEP-488を実装し、.pyoファイルを削除しました。これは、.pycファイルが最適化されていないバイトコードと最適化されたバイトコードの両方を表すことを意味します。


2
DLLファイルはPythonスクリプトまたはc / c ++スクリプトから生成されますか?
Yanki Twizzy

1
@yankitwizzy:ええ。C / C ++コードから生成する必要があります。ファイルはマシンコードにする必要があるため、Pythonから直接インポートすることはできません。
ビル・リンチ

「現在、オプティマイザはあまり役に立ちません。アサートステートメントを削除するだけです。」あなたはこれについて確信を持っていますか?試してみるdef f(x): assert(x**5 == x*x*x*x*x); return x; import timeit; print(timeit.repeat("for x in range(100): f(x)", "from __main__ import f", number=10000));
ホルヘレイタオ、2015

@JCLeitão:私は何を確信していますか?コメントでコードを単に投げるのではなく、例が示すと思うことを説明していただけませんか。
ビル・リンチ

9
Python 3.5では、PEP 488が実装されていること注意してください.pyo。これにより、ファイルの概念がなくなります。最適化されたバイトコードでさえ、.pyc拡張Python 3.5で終わります。
Michael Currie

228
  • .py-通常のスクリプト
  • .py3-(まれに使用される)Python3スクリプト。Python3スクリプトは通常、「。py3」ではなく「.py」で終わりますが、私はそれを数回見ました
  • .pyc-コンパイルされたスクリプト(バイトコード)
  • .pyo-最適化されたpycファイル(Python3.5以降、Pythonはpyoとpycではなくpycのみを使用します)
  • .pyw-コンソールなしでウィンドウモードで実行するPythonスクリプト。pythonw.exeで実行
  • .pyx -Cython srcをC / C ++に変換する
  • .pyd -Windows DLLとして作成されたPythonスクリプト
  • .pxd -C / C ++ヘッダーに相当するCythonスクリプト
  • .pxi -MyPyスタブ
  • .pyi-スタブファイル(PEP 484
  • .pyz -Pythonスクリプトアーカイブ(PEP 441); これは、標準のPythonスクリプトヘッダーの後にバイナリ形式で圧縮されたPythonスクリプト(ZIP)を含むスクリプトです。
  • .pywz -MS-Windows用のPythonスクリプトアーカイブ(PEP 441); これは、標準のPythonスクリプトヘッダーの後にバイナリ形式で圧縮されたPythonスクリプト(ZIP)を含むスクリプトです。
  • .py [cod] -ファイルが「.pyc」、「。pyo」、または「.pyd」の場合があることを意味する「.gitignore」のワイルドカード表記。
  • .pth-パス構成ファイル。その内容は、に追加される追加項目(1行に1つ)sys.pathです。siteモジュールを参照してください。

追加のPythonファイル拡張子(ほとんどの場合は非公式)のより大きなリストは、http://dcjtech.info/topic/python-file-extensions/にあります。


11
«.pyx»ファイルは、Cに変換される完全なPythonソースではなく、Cythonソースコード(つまり、Cへの変換待ち)
Fred Osterrath

「私」はPYI拡張で何を表していますか?「含む」/「実装」/「インターフェース」?
ChrisFreeman 2017年

1
.pywは、Python 4 Windowsではなく、ウィンドウを作成するPYthonスクリプトを意味します。.pywは* nixで実行できます
Kotauskas

1
一般的に、.pywはウィンドウモードで、つまりコンソール出力なしで実行するスクリプトです。@VladislavToncharovによると、Python がインストールされていれば、 Pythonをサポートするほとんどのプラットフォームで実行できます。
スティーブバーンズ

1
この回答では、.pthファイルについて説明する必要があります。
WIM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.