
Probo supports building and executing Python web applications. Unlike PHP, Probo does not ship a separate image per Python version - a single Python image can build any version of Python on demand using pyenv, exactly the way the Node.js image uses nvm. Here is an example of a Python build step:
1 2 3 4 5 6 7 8 9 10 11 | type: python python: "3.12" steps: - name: Setup Python Web Site plugin: PythonApp subDirectory: app environment: DB_DATABASE: my_database DB_USERNAME: my_user DB_PASSWORD: my_password DB_HOSTNAME: my_hostname |
At build time Probo installs the requested Python (compiling it with pyenv if it is not already present in the image), creates a virtual environment, installs your dependencies from requirements.txt, and then starts your application. nginx reverse-proxies the public build hostname to your application on 127.0.0.1:8000, so your app only needs to listen on that address (the default runCommand does this for you).
python {string}The version of Python to use for the build. This is a top-level directive (a sibling of type), not a step option. It accepts either a partial version such as "3.12" (Probo installs the latest 3.12.x) or an exact version such as "3.12.7". Quote the value so YAML does not interpret it as a number. If omitted, a sensible default is used.
subDirectory {string}The folder/directory in your repository where your application lives, relative to the root of your git repository. This is where Probo looks for requirements.txt and where it creates the virtual environment. Defaults to app.
environment {object}Environment variables to pass to your application. Values should not be quoted - Probo Portallies the appropriate quotes for you. Probo passes all of the standard Probo Environment Variables to the application as well.
1 2 3 4 5 6 7 8 | steps: - name: Setup Python Web Site plugin: PythonApp environment: DB_DATABASE: my_database DB_USERNAME: my_user DB_PASSWORD: my_password DB_HOSTNAME: my_hostname |
This example sets the DB_DATABASE, DB_USERNAME, DB_PASSWORD, and DB_HOSTNAME environment variables and passes them to your application.
buildCommand {string}The command Probo runs (from within subDirectory) to install your application’s dependencies. Defaults to:
python -m venv .venv && .venv/bin/pip install -r requirements.txt
Override it if you use a different dependency manager (for example poetry or uv) or need additional build steps.
runCommand {string}The command that starts your application. It must listen on 127.0.0.1:8000 so nginx can proxy to it. Defaults to a gunicorn (WSGI) invocation:
.venv/bin/gunicorn --daemon --bind 127.0.0.1:8000 app:app
Here app:app means “the object named app in the module app.py”. Override runCommand to point at your own module/callable, or to use an ASGI server such as uvicorn for async frameworks like FastAPI or Starlette.
In conjunction with Python, you can use any available database to store your data, as well as Solr. If no database is specified, Probo provisions PostgreSQL by default.
If you wanted to use Python with Solr, MySQL, and a specific Python version you can do it like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | type: python python: "3.12" database: mysql:8.4 assets: - solr8.zip solr: name: solr version: 8 core_archive: solr8.zip core_folder: MyApp8 compression: zip steps: - name: Setup Python Web Site plugin: PythonApp subDirectory: app |
The only items unavailable to python builds are dotnet and php. You cannot bundle PHP or Dotnet with a Python build.

When you sign up for a Probo.CI registration code, you will get a two week trial of the plan of your choosing. For more information on how to get started, click here .
LEARN MORE ABOUT PROBO.CI'S PRICING