Before you can run your app in the Python 3 runtime of the App Engine standard environment, you may need to change some of the configuration files that App Engine uses:
app.yaml
. This file contains information about your app's code, such as the runtime and the app handlers.appengine_config.py
. The Python 2 runtime uses this file to access third-party libraries and provide values for constants and "hook functions". The Python 3 runtime doesn't use this file.
Updating app.yaml
The behavior of some fields in your app.yaml
configuration file has been modified. Remove any fields that are no longer supported and update other fields as described in the following table.
Field | Change type | Description |
---|---|---|
app_engine_apis | Applicable to Python 3 only | Required to be set to true if you want to access the legacy bundled services for Python 3. |
api_version application_readable builtins | No longer supported | Not applicable in the Python 3 runtime. |
threadsafe | No longer supported | All applications are presumed to be threadsafe. If your application isn't threadsafe specify an entrypoint configuring 1 thread per worker. For example, when using the F4 instance class: entrypoint: gunicorn -b :$PORT -w 8 --threads 1 main:app See entrypoint best practices for recommended number of workers for each instance class. |
libraries | No longer supported | Use the requirements.txt file to declare dependencies and install client libraries. |
handlers: login | Supported if app_engine_apis is true | If you are not using the legacy bundled services for Python 3, use Identity and Access Management (IAM) for user management. |
handlers: script | Modified | In the Python 2 runtime, you use the script field to route incoming requests to your app's script. In the Python 3 runtime, you are required to use a web framework with in-app routing (such as Flask or Django) instead of using the To migrate your
Static file handling remains unchanged. |
If you use any of the deprecated fields, App Engine returns an error when you deploy your app.
You can use the following examples to compare the differences between the app.yaml
files:
Python 2
runtime: python27 api_version: 1 threadsafe: true handlers: - url: / script: home.app - url: /index\.html script: home.app - url: /stylesheets static_dir: stylesheets - url: /(.*\.(gif|png|jpg))$ static_files: static/\1 upload: static/.*\.(gif|png|jpg)$ - url: /admin/.* script: admin.app login: admin - url: /.* script: not_found.app
Python 3
runtime: python313 app_engine_apis: true handlers: - url: /stylesheets static_dir: stylesheets - url: /(.*\.(gif|png|jpg))$ static_files: static/\1 upload: static/.*\.(gif|png|jpg)$ - url: /admin/.* script: auto login: admin
Removing appengine_config.py
The Python 2 runtime in the App Engine standard environment uses the appengine_config.py
file.
This file is ignored in the Python 3 runtime. Instead, the Python 3 runtime uses the standard requirements.txt
file to install dependencies, including dependencies that use native code.