プログラミング

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

プログラミング
この記事は約2分で読めます。
スポンサーリンク

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

スポンサーリンク
スポンサーリンク
KoEをフォローする
CodeLab

コメント

タイトルとURLをコピーしました