How to upgrade Django to a newer version

時には更新作業は複雑な手順になってしまうことがありますが、Django の最新版に更新すると、以下ような恩恵が受けられます。

  • 新しい機能や改善点が追加される。
  • バグが修正される。
  • Older version of Django will eventually no longer receive security updates. (see サポートバージョン).
  • Django が新しくリリースされた時に更新して、コードベースを最新の状態に保っておけば、将来の更新作業が楽になる。

このセクションでは、更新作業ができるかぎりスムーズに行う助けになるよう、特に注意するべきことをいくつか説明しています。

更新時に読むべきドキュメント

はじめて Django を更新する時には、Django のリリースプロセスガイド を読んでおくと役に立つでしょう。

Afterward, you should familiarize yourself with the changes that were made in the new Django version(s):

  • まず、リリースノート を読みましょう。読む必要があるのは、現在の Django のバージョンの1つ後から、更新しようと考えているターゲットのバージョンまでの、それぞれの「最後の (final) リリース」のリリースノートです。
  • そして、対応するバージョンの 非推奨機能のタイムライン にも目を通します。

中でも特に、後方互換性のない変更点に注意してください。この点に注目すると、正しく更新するために必要なことがはっきりとわかるようになります。

If you're upgrading through more than one feature version (e.g. 2.0 to 2.2), it's usually easier to upgrade through each feature release incrementally (2.0 to 2.1 to 2.2) rather than to make all the changes for each feature release at once. For each feature release, use the latest patch release (e.g. for 2.1, use 2.1.15).

あるLTSから次のLTSにアップグレードする場合は、インクリメンタルなアップグレードする方法を推奨します。

依存関係

ほとんどの場合、Django が依存しているパッケージも最新版に更新する必要があるでしょう。その Django のバージョンがリリースされたばかりで、依存関係にあるパッケージがきちんとメンテナンスされていなかった場合、新バージョンの Django に必要なパッケージがまだインストールできないかもしれません。そのような場合には、そうした Django の依存パッケージの新バージョンが使えるようになるまで、少し待たなければならない場合があります。

廃止予定警告を解決する

アップグレードの前、Django の現在のバージョンを使っている間に、プロジェクトが挙げてくる廃止予定警告を解決しておくのがよいでしょう。アップグレードの前にこれらの警告を解決することで、コードが警告を必要とする領域について通知されるようにできます。

In Python, deprecation warnings are silenced by default. You must turn them on using the -Wa Python command line option or the PYTHONWARNINGS environment variable. For example, to show warnings while running tests:

$ python -Wa manage.py test
...\> py -Wa manage.py test

If you're not using the Django test runner, you may need to also ensure that any console output is not captured which would hide deprecation warnings. For example, if you use pytest:

$ PYTHONWARNINGS=always pytest tests --capture=no

アップグレードプロセスを続ける前に、Django の現在のバージョンで廃止予定警告を解決してください。

Django の複数バージョンをサポートするために、サードパーティアプリケーションは廃止される API を使用しているかもしれません。そのため、インストールしたパッケージの廃止予定警告は必ずしも問題を示しません。パッケージが Django の最新のバージョンをサポートしていない場合、問題を提起するかプルリクエストを送ることを考えてみてください。

インストール

Once you're ready, it is time to install the new Django version. If you are using a virtual environment and it is a major upgrade, you might want to set up a new environment with all the dependencies first.

Django を pip でインストールした場合は、--upgrade-U フラグが使用できます。

$ python -m pip install -U Django
...\> py -m pip install -U Django

テスト

新しい環境が設定されたら、 run the full test suite 。テストの出力に表示されるように、廃止予定の警告を有効にすると便利です。 (manage.py runserver を使用してアプリケーションを手動でテストする場合は、フラグを使用することもできます)

$ python -Wa manage.py test
...\> py -Wa manage.py test

テストを実行したら、テストに失敗した点をすべて修正しましょう。リリースノートの内容を心に留めながらコードをリファクタリングして、非推奨の警告が出ないようにすれば、Django の新しい機能の恩恵も受けられるかもしれません。

デプロイ

新しいバージョンの Django でもアプリケーションが動作すると自信を持って言えるようになったならば、更新した Django プロジェクトを デプロイ する準備ができたことになります.

Django が提供するキャッシュを利用している場合には、更新後にキャッシュをクリアしなければなりません。クリアしなかった場合にはどんな問題が起こり得るでしょうか? たとえば、pickle 化したオブジェクトをキャッシュしていた場合には、複数のバージョンの Django にわたって pickle の互換性が保証されません。過去の非互換性の例では、pickle 化された HttpResponse オブジェクトを、 cache_page() デコレータを介して直接的または間接的にキャッシュしていました。