Set up your Python and Flask development environment
In this guide, you'll set up your Python and Flask development environment to build Twilio applications.
Consult the README for the latest supported Python version.
To check your Python version, open a terminal and run:
1$ python --version2Python 3.9.0
On some systems, you might need to use python3
instead of python
:
1$ python3 --version2Python 3.11.5
Info
On macOS, the python
command might refer to Python 2, and python3
refers to Python 3. Use python3
when working with Python 3 on macOS.
How you install Python varies depending on your operating system.
Operating system | Instructions |
---|---|
macOS | macOS comes with Python pre-installed, but it's recommended to install your own Python 3 version. Homebrew is a popular tool for installing Python 3 on macOS. You can find detailed instructions in the Python Guide for macOS. |
Windows | The best way to install Python on Windows is by using the official installer from the Python Software Foundation. The x86-64 (64-bit) version is generally recommended, but if you need better compatibility with certain third-party packages, the x86 (32-bit) version may be more suitable. |
Linux | The exact instructions to install Python vary by distribution. Find instructions for Unix on the official Python website, or check your distribution's documentation for details. |
Before you can start your Python project, you'll need an editor or integrated development environment (IDE) to write your code.
If you already have a code-writing tool of choice, you can use it for developing your Python application. If you're looking for something new, you might consider trying out a few options:
- Visual Studio Code is another text editor that's free, easy to set up, and available on all platforms.
- PyCharm is a fully integrated development environment (IDE) for Python. It takes longer to set up but comes with more helpful tools already installed.
- Vim is a perennial favorite text editor among advanced users.
If you're new to programming, consider giving Sublime Text and PyCharm a try before you settle on your favorite.
Virtual environments are useful because they keep each Python project's packages separate. This helps avoid problems when different projects need different versions of the same package. It also makes your code more reliable when developing and deploying. Follow these steps to create and activate a virtual environment:
-
Create the
venv
module from the standard library. -
Use the appropriate command to create a new virtual environment named
myproject
. On some systems, you might need to usepython3
instead ofpython
:1# Python 3.7+ (using python or python3 depending on your system)2$ python -m venv myproject34# Or5$ python3 -m venv myproject -
Activate the virtual environment using the following commands, depending on your operating system:
1# Activate the virtual environment (macOS and Linux)2$ source myproject/bin/activate34# Activate the virtual environment (Windows)5$ myproject\Scripts\activate
You're almost ready to start writing your Flask web application. First, you need to install the Flask library and the Twilio Python SDK in your virtual environment.
-
Ensure your virtual environment is active.
-
Install Flask and the Twilio library using
pip
:$ pip install Flask-TwilioNote: If you're using Python 3 outside of a virtual environment, you might need to use
pip3
instead ofpip
. -
After installing your dependencies, you might want to keep track of and control which versions you're using. Pip allows you to "freeze" your dependencies and record the versions in a file called
requirements.txt
. Create a requirements file with this command:$ pip freeze > requirements.txt
You can test that your development environment is configured correctly by creating a simple Flask application. Follow these steps:
-
Create a new file named
app.py
and copy the following code into it:1from flask import Flask2app = Flask(__name__)34@app.route("/")5def hello():6return "Hello World!"78if __name__ == "__main__":9app.run() -
Run your new Flask application with the command:
1cd myproject2$ python app.pyNote: On macOS and some Linux systems, you might need to use
python3
instead ofpython
:1cd myproject2$ python3 app.py -
Open http://localhost:5000 in your browser. You should see the "Hello World!" response.
Most Twilio services use webhooks to communicate with your application. When Twilio receives an incoming phone call, for example, it reaches out to a URL in your application for instructions on how to handle the call.
Note: If you're using a virtual machine for your development environment, such as Vagrant, you might not be able to see your Flask application at the localhost hostname. Continue to the ngrok section for an easy way to fix this.
When you're building your Flask app locally, it's only accessible from your own computer. That means Twilio can't reach it from the internet to send requests or data.
ngrok is a helpful tool to solve this problem. Once started, it provides a unique URL on the ngrok.io
domain which will forward incoming requests to your local development environment.
To start, head over to the ngrok download page and download the binary for your operating system: https://ngrok.com/download.
Once downloaded, make sure your Flask application is running, and then start ngrok using this command:
$ ngrok http 5000
You should see output similar to this:

You should see a "Forwarding" line in your ngrok terminal output, e.g.:
Forwarding http://aaf29606.ngrok.io -> http://localhost:5000
Look at the "Forwarding" line to see your unique ngrok domain name (for example, aaf29606.ngrok.io
), and then open that URL in your browser.
If everything's working correctly, you should see your Flask application's "Hello World!" message displayed at your new ngrok URL.
Anytime you're working on your Twilio application and need a URL for a webhook, you should use ngrok to get a publicly accessible URL like this one.
You've learned about ngrok
, pip
, and virtual environments, and now you're ready to build your Flask application. Learn more with the following resources: