Python Version Support
======================

Chalice supports all versions of python supported by AWS Lambda, which is
currently ``python2.7`` and ``python3.6``.

Chalice will automatically pick which version of python to use for Lambda
based on the major version of python you are using.  You don't have to
explicitly configure which version of python you want to use. For example::

    $ python --version
    Python 3.6.1
    $ chalice new-project test-versions
    $ cd test-versions
    $ chalice package test-package
    $ grep -C 3 python test-package/sam.json
        "APIHandler": {
          "Type": "AWS::Serverless::Function",
          "Properties": {
            "Runtime": "python3.6",
            "Handler": "app.app",
            "CodeUri": "./deployment.zip",
            "Events": {

    # Similarly, if we were to run "chalice deploy" we'd
    # use python3.6 for the runtime.
    $ chalice --debug deploy
    Initiating first time deployment...
    Deploying to: dev
    ...
    "Runtime":"python3.6"
    ...
    https://rest-api-id.execute-api.us-west-2.amazonaws.com/api/


In the example above, we're using python 3.6.1 so chalice automatically
selects the ``python3.6`` runtime for lambda.  If we were using python 2.7.11,
chalice would automatically select ``python2.7`` as the runtime.

Chalice will emit a warning if the minor version does not match a python
version supported by Lambda.  Chalice will select the closest Lambda version
in this scenario, as shown in the table below.

====================      =====================
Local Python Version      Lambda Python Runtime
====================      =====================
python2.7.10               python2.7
python2.7.11               python2.7
python2.7.12               python2.7
python2.7.13               python2.7
python3.3.6                python3.6
python3.4.6                python3.6
python3.5.3                python3.6
python3.6.0                python3.6
python3.6.1                python3.6
====================      =====================

We strongly encourage you to develop your application using the same
major/minor version of python you plan on using on AWS Lambda.


Changing Python Runtime Versions
================================

The version of the python runtime to use in AWS Lambda can be reconfigured
whenever you deploy your chalice app.  This allows you to migrate to python3
in AWS Lambda by creating a new virtual environment that uses python3.
For example, suppose you have an existing chalice app that uses python2::

    $ python --version
    Python 2.7.12
    $ chalice deploy
    ...
    https://endpoint/api

To upgrade the application to use python3, create a python3 virtual environment
and redeploy.  When this happens, you will be prompted to confirm the python
runtime version changing::

    $ deactivate
    $ virtualenv --python python3 /tmp/venv3
    $ source /tmp/venv3/bin/activate
    $ python --version
    Python 3.6.1
    $ chalice deploy
    ...
    The python runtime will change from python2.7 to python3.6,
    would you like to continue?  [Y/n]: y
    ...
    https://endpoint/api
