123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- ===================================
- Upgrading Django to a newer version
- ===================================
- While it can be a complex process at times, upgrading to the latest Django
- version has several benefits:
- * New features and improvements are added.
- * Bugs are fixed.
- * Older version of Django will eventually no longer receive security updates.
- (see :ref:`backwards-compatibility-policy`).
- * Upgrading as each new Django release is available makes future upgrades less
- painful by keeping your code base up to date.
- Here are some things to consider to help make your upgrade process as smooth as
- possible.
- Required Reading
- ================
- If it's your first time doing an upgrade, it is useful to read the :doc:`guide
- on the different release processes </internals/release-process>`.
- Afterwards, you should familiarize yourself with the changes that were made in
- the new Django version(s):
- * Read the :doc:`release notes </releases/index>` for each 'final' release from
- the one after your current Django version, up to and including the version to
- which you plan to upgrade.
- * Look at the :doc:`deprecation timeline</internals/deprecation>` for the
- relevant versions.
- Pay particular attention to backwards incompatible changes to get a clear idea
- of what will be needed for a successful upgrade.
- Dependencies
- ============
- In most cases it will be necessary to upgrade to the latest version of your
- Django-related dependencies as well. If the Django version was recently
- released or if some of your dependencies are not well-maintained, some of your
- dependencies may not yet support the new Django version. In these cases you may
- have to wait until new versions of your dependencies are released.
- Installation
- ============
- Once you're ready, it is time to :doc:`install the new Django version
- </topics/install>`. If you are using virtualenv_ and it is a major upgrade, you
- might want to set up a new environment with all the dependencies first.
- Exactly which steps you will need to take depends on your installation process.
- The most convenient way is to use pip_ with the ``--upgrade`` or ``-U`` flag:
- .. code-block:: bash
- $ pip install -U Django
- pip_ also automatically uninstalls the previous version of Django.
- If you use some other installation process, you might have to manually
- :ref:`uninstall the old Django version <removing-old-versions-of-django>` and
- should look at the complete installation instructions.
- .. _pip: http://www.pip-installer.org/
- .. _virtualenv: http://www.virtualenv.org/
- Testing
- =======
- When the new environment is set up, :doc:`run the full test suite
- </topics/testing/overview>` for your application. In Python 2.7+, deprecation
- warnings are silenced by default. It is useful to turn the warnings on so they
- are shown in the test output (you can also use the flag if you test your app
- manually using ``manage.py runserver``):
- .. code-block:: bash
- $ python -Wall manage.py test
- After you have run the tests, fix any failures. While you have the release
- notes fresh in your mind, it may also be a good time to take advantage of new
- features in Django by refactoring your code to eliminate any deprecation
- warnings.
- Deployment
- ==========
- When you are sufficiently confident your app works with the new version of
- Django, you're ready to go ahead and :doc:`deploy </howto/deployment/index>`
- your upgraded Django project.
- If you are using caching provided by Django, you should consider clearing your
- cache after upgrading. Otherwise you may run into problems, for example, if you
- are caching pickled objects as these objects are not guaranteed to be
- pickle-compatible across Django versions. A past instance of incompatibility
- was caching pickled :class:`~django.http.HttpResponse` objects, either
- directly or indirectly via the :func:`~django.views.decorators.cache.cache_page`
- decorator.
|