This project is fully containerized with Docker to guarantee bit‑for‑bit reproducibility. You can either drive everything from the CLI or hook into your IDE (PyCharm) for an integrated experience. Follow the instructions that match your workflow.
- Docker (Engine & CLI) installed and running
- Docker Compose (if not bundled with Docker)
- A local checkout of this repository
Assumes you have
dockeranddocker-composein your$PATHand that you’re in the project root.
-
Build the dev image
docker-compose build
-
Launch the container
docker-compose up -d
- Your project directory is bind‑mounted into
/appinside the container. - A persistent pip cache volume speeds up installs.
- Your project directory is bind‑mounted into
-
Run commands inside the container
# Open a shell docker-compose exec app bash # From within: install extras, run tests, start analysis, etc. pytest --cov=common --cov-report=term-missing # Coverage results will be uploaded to Codecov by the CI pipeline python scripts/your_analysis.py --input data/data.parquet --output results/ # Or exit when you’re done: exit
-
Stop & clean up
docker-compose down
Assumes you’re using PyCharm Professional (with Docker support).
Add a Docker‑Compose interpreter
-
Preferences → Project → Python Interpreter → ⚙️ → Add… → Docker Compose
-
Select:
- Compose file:
docker-compose.yml - Service:
app - Python interpreter path:
/usr/local/bin/python3
- Compose file:
-
Click OK and let PyCharm probe the container.
Whenever you update your requirements/*.in files, you need to recompile them into .txt, rebuild your Docker images, and restart the services. Instead of doing these steps by hand, use the provided sync_dependencies.sh script:
# From the project root:
./sync_dependencies.shThis script will:
- Run
pip-compileinside the Docker environment to updaterequirements/*.txt(ensuring the correct Python/OS context). - Rebuild your Docker Compose images.
- Redeploy all services (with
--remove-orphansto clean up any old containers).
After it finishes, your dependencies and containers will be fully up-to-date without manual intervention.
This repository uses the following template. See TEMPLATE.md for instructions on customizing the template.