いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Pythonメモ-66 (pycファイルの生成が行われないようにする) (PYTHONDONTWRITEBYTECODE, sys.dont_write_bytecode, __pycache__, pyc)

概要

よく忘れるので、ちょこっと自分用のメモです。

Pythonでは、モジュールをimportするとデフォルトでインタープリターがソースコードをbytecodeに変換した結果をpycファイルとして書き出すようになっています。

このファイルは、__pycache__という名前のディレクトリに出力されます。(これPython3からこうなったと記憶あり。たしか、Python2系ではpyと同じ場所にpyc出来てたはずです)

Python始めた頃に、「なんだこのディレクトリ?」ってなる人多いのではないでしょうか。

で、このpycファイル、別に無くても構いません。存在する場合、Pythonが実行時にbytecodeへのコンパイルを省略してくれるだけです。

なければ、その都度bytecodeコンパイルが走ります。云わば、キャッシュみたいなものです。pycファイルがあるからといって実行速度が上がるわけではありません。

今回このpycファイルの生成をしないようにする設定についてです。

なんでpycファイル無い方がいいのか?

個人的に以下の理由からです。

  • __pycache__ ディレクトリとか勝手に出来上がるのが嫌。てか邪魔

  • pycファイルの中身は、バージョン毎に互換性がない。たまに、同じスクリプトをバージョン切り替えて実行したいときにpycファイルが上書きされたりしたりする。

  • 基本ずっとOFFの状態で作業しているけど、困ったことが今のところ無い。

設定方法

pycファイルを生成しないようにする設定は、以下のどれかで出来ます。

環境変数にPYTHONDONTWRITEBYTECODEを設定する

私自身はこの方法でいつも設定しています。環境変数にPYTHONDONTWRITEBYTECODEという名前で定義します。

値は、なんでもいいです。私はいつも「1」です。

sys.dont_write_bytecodeをTrueに設定する

これは実行時に設定するやり方。

import sys
sys.dont_write_bytecode = True

で、生成されなくなります。

pythonコマンドの-Bオプションをつける

以下のようにします。

$ python -B asyncio01.py

参考情報

stackoverflow.com

stackoverflow.com

1. コマンドラインと環境 — Python 3.6.4 ドキュメント

1. コマンドラインと環境 — Python 3.6.4 ドキュメント

Common Gotchas — The Hitchhiker's Guide to Python


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。