Skip Navigation
Show nav
Heroku Dev Center
  • Get Started
  • Documentation
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
  • Documentation
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
View categories

Categories

  • Heroku Architecture
    • Dynos (app containers)
    • Stacks (operating system images)
    • Networking & DNS
    • Platform Policies
    • Platform Principles
  • Command Line
  • Deployment
    • Deploying with Git
    • Deploying with Docker
    • Deployment Integrations
  • Continuous Delivery
    • Continuous Integration
  • Language Support
    • Node.js
    • Ruby
      • Working with Bundler
      • Rails Support
    • Python
      • Background Jobs in Python
      • Working with Django
    • Java
      • Working with Maven
      • Java Database Operations
      • Working with Spring Boot
      • Java Advanced Topics
    • PHP
    • Go
      • Go Dependency Management
    • Scala
    • Clojure
  • Databases & Data Management
    • Heroku Postgres
      • Postgres Basics
      • Postgres Getting Started
      • Postgres Performance
      • Postgres Data Transfer & Preservation
      • Postgres Availability
      • Postgres Special Topics
    • Heroku Data For Redis
    • Apache Kafka on Heroku
    • Other Data Stores
  • Monitoring & Metrics
    • Logging
  • App Performance
  • Add-ons
    • All Add-ons
  • Collaboration
  • Security
    • App Security
    • Identities & Authentication
    • Compliance
  • Heroku Enterprise
    • Private Spaces
      • Infrastructure Networking
    • Enterprise Accounts
    • Enterprise Teams
    • Heroku Connect (Salesforce sync)
      • Heroku Connect Administration
      • Heroku Connect Reference
      • Heroku Connect Troubleshooting
    • Single Sign-on (SSO)
  • Patterns & Best Practices
  • Extending Heroku
    • Platform API
    • App Webhooks
    • Heroku Labs
    • Building Add-ons
      • Add-on Development Tasks
      • Add-on APIs
      • Add-on Guidelines & Requirements
    • Building CLI Plugins
    • Developing Buildpacks
    • Dev Center
  • Accounts & Billing
  • Troubleshooting & Support
  • Integrating with Salesforce
  • Language Support
  • Python
  • Heroku Python Support

Heroku Python Support

English — 日本語に切り替える

Last updated February 22, 2023

Table of Contents

  • Recognizing a Python app
  • Specifying a Python version
  • Build behavior
  • Database provisioning
  • Checking the Python buildpack version

Heroku supports all popular web frameworks for Python (Django, Flask, and so on).

For a deployment tutorial that uses a sample Django app, see Getting Started on Heroku with Python.

Recognizing a Python app

Heroku automatically recognizes your app as a Python app if it includes a requirements.txt, setup.py or Pipfile file in its root directory.

When a deployed application is recognized as a Python application, you’ll see this in the build output:

$ git push heroku master
-----> Python app detected

Specifying a Python version

By default, newly created Python apps use the python-3.11.2 runtime. You can also specify a different supported Python version.

Supported runtimes

  • python-3.11.2 (available on all stacks; recommended)
  • python-3.10.10 (available on all stacks)
  • python-3.9.16 (available on all stacks)
  • python-3.8.16 (available on the Heroku-18 and Heroku-20 stacks only)

Deprecated runtimes

  • python-3.7.16 (available on the Heroku-18 and Heroku-20 stacks only)

If you are seeing “Requested runtime is not available for this stack” errors using one of the versions above, check that your app is using the latest version of the Python buildpack.

Build behavior

If your app includes a requirements.txt file, Heroku runs the following command to resolve dependencies:

$ pip install -r requirements.txt

Database provisioning

A mini Heroku Postgres database is automatically provisioned if:

  • A manage.py file exists in the root of the app source
  • Both the django and psycopg2 packages are installed

Automatic provisioning of a database also populates your app’s DATABASE_URL config var.

A Heroku Postgres database is not automatically provisioned for other Python apps, but you can easily provision one manually.

Checking the Python buildpack version

The Python buildpack is what transforms your Python source code into a slug that can be deployed on Heroku.

For best results it’s recommended that you are using the latest stable version of the buildpack (rather than pinning to a tag/branch or using a fork), otherwise some documented features may not work, and you won’t benefit from future bug fixes or improvements made to the buildpack.

The stable heroku/python buildpack release is also pre-installed in the build environment, so using it will improve build performance compared to GitHub URLs.

For more information see Buildpack References.

To check which buildpack(s) are configured on your app, use the heroku buildpacks CLI command:

$ heroku buildpacks
=== my-example-app Buildpack URL
https://github.com/heroku/heroku-buildpack-python.git

If you see a GitHub URL such as the one above (or one that is pinned to a custom branch or tag), then it’s recommended that you instead switch to heroku/python, which is the curated stable buildpack registry release.

To do this, first clear the existing buildpacks set on the app, using:

$ heroku buildpacks:clear
Buildpacks cleared.

And then add the Python buildpack like so:

$ heroku buildpacks:add heroku/python
Buildpack added.

Finally check that the configured buildpacks are correct:

$ heroku buildpacks
=== my-example-app Buildpack URL
heroku/python

If your app originally had multiple buildpacks set, you will need to add them in the same order as they were listed in heroku buildpacks previously. For example:

$ heroku buildpacks
=== my-example-app Buildpack URLs
1. heroku-community/example-buildpack
2. https://github.com/heroku/heroku-buildpack-python.git
$ heroku buildpacks:clear
$ heroku buildpacks:add heroku-community/example-buildpack
$ heroku buildpacks:add heroku/python
$ heroku buildpacks
=== my-example-app Buildpack URLs
1. heroku-community/example-buildpack
2. heroku/python

Keep reading

  • Python

Feedback

Log in to submit feedback.

Specifying a Python Runtime Python 2.7 EOL FAQ

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Podcasts
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing

Subscribe to our monthly newsletter

Your email address:

  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Heroku Podcasts
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Facebook
  • Instagram
  • Github
  • LinkedIn
  • YouTube
Heroku is acompany

 © Salesforce.com

  • heroku.com
  • Terms of Service
  • Privacy
  • Cookies
  • Cookie Preferences