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

# Python

> Deploy Python applications with Hop

<Snippet file="nixpacks-notice.mdx" />

Python is detected when you have one of the following files in your codebase:

* `main.py`
* `requirements.txt`
* `pyproject.toml`

## Build Command

Depending on the dependency file detected in your project, a different command will be used to build your image.

<AccordionGroup>
  <Accordion title="requirements.txt">
    ```shell theme={null}
    pip install -r requirements.txt
    ```
  </Accordion>

  <Accordion title="pyproject.toml">
    ```shell theme={null}
    pip install --upgrade build setuptools && pip install .
    ```

    If a poetry.lock file is also detected, this will be ran instead:

    ```shell theme={null}
    poetry install --no-dev --no-interactive --no-ansi
    ```
  </Accordion>

  <Accordion title="Pipfile">
    ```shell theme={null}
    PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy
    ```
  </Accordion>
</AccordionGroup>

## Start Command

<AccordionGroup>
  <Accordion title="Django">
    If Django is detected, the following command will be used:

    ```shell theme={null}
    python manage.py migrate && gunicorn {app_name}.wsgi
    ```
  </Accordion>

  <Accordion title="pyproject.toml">
    ```shell theme={null}
    python -m {module}
    ```
  </Accordion>

  <Accordion title="Otherwise">
    ```shell theme={null}
    python main.py
    ```
  </Accordion>
</AccordionGroup>

Depending on files detected within your project, a different start command (entrypoint) will be used to run your application.

## Versions

The following Python versions are available:

* 3.11
* 3.10
* 3.9
* 3.8 (**default**)
* 3.7
* 2.7

### Specifying a version

The version can be overridden by:

* Setting the `NIXPACKS_PYTHON_VERSION` environment variable, or
* Specifying the version in a `.python-version` file
