> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cockroachlabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Set up a Virtual Environment for Developing Global Applications

This page guides you through setting up a virtual environment for developing and debugging a global application. It is the third section of the [Develop and Deploy a Global Application](https://docs.cockroachlabs.com/docs/v23.2/movr.md#develop-and-deploy-a-global-application) tutorial. In this section, you will set up a demo CockroachDB cluster, initialize the database, and set up a virtual development environment.

## Before you begin

1. Complete the previous section of the tutorial, [Create a Multi-Region Database Schema](https://docs.cockroachlabs.com/docs/v23.2/movr-flask-database).
2. Make sure that you have the following installed on your local machine:
   * [CockroachDB](https://docs.cockroachlabs.com/docs/v23.2/install-cockroachdb-mac.md)
   * [Python 3](https://www.python.org/downloads)
   * [Pipenv](https://pipenv.pypa.io/)
3. Clone the [`movr-flask`](https://github.com/cockroachlabs/movr-flask) repository. We'll reference the source code in this repository throughout the tutorial.

## Set up a demo multi-region CockroachDB cluster

For debugging and development purposes, you can use the [`cockroach demo`](https://docs.cockroachlabs.com/docs/v23.2/cockroach-demo) command. This command starts up a secure, nine-node demo cluster.

1. To set up the demo multi-region cluster, run `cockroach demo`, with the `--nodes` and `--demo-locality` flags. The localities specified below assume GCP region names.

   ```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
   $ cockroach demo \
   --nodes=9 \
   --demo-locality=region=gcp-us-east1:region=gcp-us-east1:region=gcp-us-east1:\
   region=gcp-us-west1:region=gcp-us-west1:region=gcp-us-west1:\
   region=gcp-europe-west1:region=gcp-europe-west1:region=gcp-europe-west1 \
   --empty
   ```

   Keep this terminal window open. Closing it will shut down the demo cluster.
2. Open another terminal window. In the new window, run the following command to load `dbinit.sql` to the demo database. This file contains the `movr` database schema that we covered in [Create a Multi-Region Database Schema](https://docs.cockroachlabs.com/docs/v23.2/movr-flask-database).

   ```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
   $ cockroach sql --url='postgres://demo:<demo_password@127.0.0.1:26257?sslmode=require' -f dbinit.sql
   ```
3. In the demo cluster terminal, verify that the database schema loaded properly:

   ```sql theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
   > SHOW TABLES;
   ```

   ```text theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
     table_name
   +------------+
     rides
     users
     vehicles
   (3 rows)
   ```

> [!NOTE]
>
> In production, you want to start a secure CockroachDB cluster, with nodes on machines located in different areas of the world. For instructions on deploying a multi-region CockroachDB cluster for this application, using CockroachDB Standard, see [Deploy a Global, Serverless Application](https://docs.cockroachlabs.com/docs/v23.2/movr-flask-deployment).

## Set up a virtual development environment

For debugging, use [`pipenv`](https://docs.pipenv.org/), a tool that manages dependencies with `pip` and creates virtual environments with `virtualenv`.

1. Run the following command to initialize the project's virtual environment:

   ```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
   $ pipenv --three
   ```

   `pipenv` creates a `Pipfile` in the current directory, with the requirements needed for the app.
2. Run the following command to install the packages listed in the `Pipfile`:

   ```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
   $ pipenv install
   ```
3. Activate the virtual environment:

   ```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
   $ pipenv shell
   ```

   From this shell, you can run any Python 3 application with the required dependencies that you listed in the `Pipfile`, and the environment variables that you listed in the `.env` file. You can exit the shell subprocess at any time with a simple `exit` command.
4. To test out the application, you can run the server file:

   ```shell theme={"theme":{"light":"catppuccin-mocha","dark":"catppuccin-mocha"}}
   $ python server.py
   ```
5. Navigate to the URL provided to test out the application. By default, this should be [http://127.0.0.1:5000/](http://127.0.0.1:5000/).

> [!NOTE]
>
> In production, you want to [containerize](https://www.docker.com/resources/what-container) your application and deploy it with a deployment orchestration tool, like [Kubernetes](https://kubernetes.io/), or with a serverless deployment service, like [Google Cloud Run](https://cloud.google.com/run). We cover deploying the application with Google Cloud Run in [Deploy a Global Application](https://docs.cockroachlabs.com/docs/v23.2/movr-flask-deployment).

## Next steps

Now that you've set up a development environment, you can start [developing and debugging the application](https://docs.cockroachlabs.com/docs/v23.2/movr-flask-application).

## See also

* [`movr-flask` on GitHub](https://github.com/cockroachlabs/movr-flask)
* [`cockroach demo`](https://docs.cockroachlabs.com/docs/v23.2/cockroach-demo)
* [Pipenv](https://pipenv.pypa.io/)
