Django の新しいバージョンへの更新¶
時には更新作業は複雑な手順になってしまうことがありますが、Django の最新版に更新すると、以下ような恩恵が受けられます。
新しい機能や改善点が追加される。
バグが修正される。
古いバージョンの Django は最終的にはセキュリティアップデートが受けられなくなる (サポートバージョン を参照してください)。
Django が新しくリリースされた時に更新して、コードベースを最新の状態に保っておけば、将来の更新作業が楽になる。
このセクションでは、更新作業ができるかぎりスムーズに行う助けになるよう、特に注意するべきことをいくつか説明しています。
更新時に読むべきドキュメント¶
はじめて Django を更新する時には、Django のリリースプロセスガイド を読んでおくと役に立つでしょう。
更新を行う前には、新しいバージョンの Django ではどのような点が変更されたのかをよく知っておく必要があります。
まず、リリースノート を読みましょう。読む必要があるのは、現在の Django のバージョンの1つ後から、更新しようと考えているターゲットのバージョンまでの、それぞれの「最後の (final) リリース」のリリースノートです。
そして、対応するバージョンの 非推奨機能のタイムライン にも目を通します。
中でも特に、後方互換性のない変更点に注意してください。この点に注目すると、正しく更新するために必要なことがはっきりとわかるようになります。
依存関係¶
ほとんどの場合、Django が依存しているパッケージも最新版に更新する必要があるでしょう。その Django のバージョンがリリースされたばかりで、依存関係にあるパッケージがきちんとメンテナンスされていなかった場合、新バージョンの Django に必要なパッケージがまだインストールできないかもしれません。そのような場合には、そうした Django の依存パッケージの新バージョンが使えるようになるまで、少し待たなければならない場合があります。
Resolving deprecation warnings¶
Before upgrading, it’s a good idea to resolve any deprecation warnings raised by your project while using your current version of Django. Fixing these warnings before upgrading ensures that you’re informed about areas of the code that need altering.
In Python, deprecation warnings are silenced by default. You must turn them on
using the -Wall
Python command line option or the PYTHONWARNINGS
environment variable. For example, to show warnings while running tests:
$ python -Wall 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 py.test:
$ PYTHONWARNINGS=all py.test tests --capture=no
Resolve any deprecation warnings with your current version of Django before continuing the upgrade process.
Third party applications might use deprecated APIs in order to support multiple versions of Django, so deprecation warnings in packages you’ve installed don’t necessarily indicate a problem. If a package doesn’t support the latest version of Django, consider raising an issue or sending a pull request for it.
インストール¶
さあ、準備ができたら、新しいバージョンの Django をインストールする 時です。virtualenv を使っていて、これが Django のメジャーアップデートなら、virtualenv で新しい環境をセットアップして、そこに Django を依存パッケージとともにインストールしてもいいでしょう。
次にどのステップを踏むべきかはあなたのインストールの進め方によって変わりますが、一番簡単な方法は、次のように pip に --upgrade
または -U フラグを付けて実行するというものです。
$ pip install -U Django
pip を使えば、過去のバージョンの Django も自動的にアンインストールしてくれます。
これ以外のインストールの進め方を選んだ人は、手動で 古いバージョンの Django をアンインストール して、完全なインストール手順を読む必要があるかもしれません。
テスト¶
When the new environment is set up, run the full test suite for your application. Again, it’s useful to turn
on deprecation warnings on so they’re shown in the test output (you can also
use the flag if you test your app manually using manage.py runserver
):
$ python -Wall manage.py test
テストを実行したら、テストに失敗した点をすべて修正しましょう。リリースノートの内容を心に留めながらコードをリファクタリングして、非推奨の警告が出ないようにすれば、Django の新しい機能の恩恵も受けられるかもしれません。
Deployment¶
新しいバージョンの Django でもアプリケーションが動作すると自信を持って言えるようになったならば、更新した Django プロジェクトを デプロイ する準備ができたことになります.
Django が提供するキャッシュを利用している場合には、更新後にキャッシュをクリアしなければなりません。クリアしなかった場合にはどんな問題が起こり得るでしょうか? たとえば、pickle 化したオブジェクトをキャッシュしていた場合には、複数のバージョンの Django にわたって pickle の互換性が保証されません。A past instance of incompatibility was caching pickled HttpResponse
objects, either directly or indirectly via the cache_page()
decorator.