Django
の各アプリケーションディレクトリに「 __pycache__
」という、 Python
がコンパイルされたバイナリファイル( .pyc )が格納されたディレクトリが作られるんですが、このディレクトリが作成されることで不都合が生じることがあったので、削除することにしました。
今回は __pycache___
ディレクトリの削除方法を説明したいと思います。
前提条件
- Python : 3.6.2
- Django : 3.0.2
pycache ディレクトリとは
ファイルをインポートした際に「 __pycahce__
ディレクトリ」が作成され、 Python
がコンパイルされたバイナリファイル( .pyc )がディレクトリ直下に作成されます。インポート時の読み込みが早くなります。
削除しても特に問題はないみたいです。
削除しようと思ったきっかけ
普通に Django
で開発しているうちは特に問題なかったんですが、 Django
の Form
の ChoiceField
でセレクトボックスのリスト( choices )を動的に定義している際に、リストの内容を変更しても最初に作成されているバイナリファイル( .pyc )を読み込んでしまい、リストが更新されない問題が発生してしまいました。セレクトボックスのリストを Django
の QuerySet
を利用して設定している場合に今回の問題が発生しました。
pycache の削除方法
普通に削除コマンドを実行すれば削除できます。
$ rm -rf app/__pycache__/
ただ、このままだとファイルがインポートされるとまた __pycache__
ディレクトリが作成されてしまいます。
そこで、あらかじめキャッシュファイルを作成しないように設定しておく必要があります。
環境変数の「 PYTHONDONTWRITEBYTECODE
」に 1 を指定するとキャッシュファイルを作成しないように設定できます。
export PYTHONDONTWRITEBYTECODE=1
最後に
今回、本番環境で動的に定義されたセレクトボックスのリストが更新されず、今回の設定を追加しました。以前の Django
や Python
ではこのような問題は起きなかったので、原因の特定にかなり時間がかかってしまいました。 Python
や Django
をバージョンアップした際には、以前のバージョンとの変更点をしっかり確認してバージョンアップを行っても問題が起きないようにしっかり対応していきたいですね。
コメント