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.
application_readable
builtins
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.app_engine_apis
is true
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 script
field.
To migrate your app.yaml
file to the Python 3 runtime, do
one of the following, depending on whether the file contains static handlers
as well as script handlers:
- If your
app.yamlfile contains static handlers, do one of the following to ensure that requests for dynamic content are routed to your app's script:- Remove all
scriptfields. Then add anentrypointfield to start a web server that runs your app. Requests that don't match any of your static handers will be directed to the web server you specified in theentrypointfield. The web server and your app's web framework are responsible for routing the request to the correct script. - Replace the value of all
scriptfields withauto. App Engine will automatically run your app in a web server (assuming your app meets a few requirements ), and all requests that match a script handler will be directed to the web server. The web server and your app's web framework are responsible for routing the request to the correct script. - If your
app.yamlfile does not contain static handlers, remove allscriptfields. All requests to your app will be directed to your app's web server, and your app's framework will route the request to the correct script. You can optionally add anentrypointfield to customize the default startup behavior . If yourapp.yamlhas both types of handlers, you can still remove all the script handlers that would be markedauto, leaving behind the static handlers as well asautohandlers requiring other directives, such as the admin-only handler in the example below.
- Remove all
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
:
python314
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.

