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
をバージョンアップした際には、以前のバージョンとの変更点をしっかり確認してバージョンアップを行っても問題が起きないようにしっかり対応していきたいですね。
コメント