Django Logo

[Django] __pycache__ ディレクトリを削除する

Django の各アプリケーションディレクトリに「 __pycache__ 」という、 Python がコンパイルされたバイナリファイル( .pyc )が格納されたディレクトリが作られるんですが、このディレクトリが作成されることで不都合が生じることがあったので、削除することにしました。
今回は __pycache___ ディレクトリの削除方法を説明したいと思います。

前提条件

  • Python : 3.6.2
  • Django : 3.0.2

pycache ディレクトリとは

ファイルをインポートした際に「 __pycahce__ ディレクトリ」が作成され、 Python がコンパイルされたバイナリファイル( .pyc )がディレクトリ直下に作成されます。インポート時の読み込みが早くなります。
削除しても特に問題はないみたいです。

削除しようと思ったきっかけ

普通に Django で開発しているうちは特に問題なかったんですが、 DjangoFormChoiceField でセレクトボックスのリスト( choices )を動的に定義している際に、リストの内容を変更しても最初に作成されているバイナリファイル( .pyc )を読み込んでしまい、リストが更新されない問題が発生してしまいました。セレクトボックスのリストを DjangoQuerySet を利用して設定している場合に今回の問題が発生しました。

pycache の削除方法

普通に削除コマンドを実行すれば削除できます。

$ rm -rf app/__pycache__/

ただ、このままだとファイルがインポートされるとまた __pycache__ ディレクトリが作成されてしまいます。
そこで、あらかじめキャッシュファイルを作成しないように設定しておく必要があります。
環境変数の「 PYTHONDONTWRITEBYTECODE 」に 1 を指定するとキャッシュファイルを作成しないように設定できます。

export PYTHONDONTWRITEBYTECODE=1

最後に

今回、本番環境で動的に定義されたセレクトボックスのリストが更新されず、今回の設定を追加しました。以前の DjangoPython ではこのような問題は起きなかったので、原因の特定にかなり時間がかかってしまいました。 PythonDjango をバージョンアップした際には、以前のバージョンとの変更点をしっかり確認してバージョンアップを行っても問題が起きないようにしっかり対応していきたいですね。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です