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: python312
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.