Python Project Skill
Modern Python project development using uv package manager and Flask for web components.
Quick Start
New Project with uv
Initialize new project
uv init my-project cd my-project
Add dependencies
uv add flask pytest ruff mypy
Run application
uv run python app.py
Run with Flask
uv run flask run --debug
Package Manager: uv
Use uv (astral-sh/uv) for all Python package management. It replaces pip, poetry, pyenv, and virtualenv.
Common Commands
Project management
uv init <name> # Initialize project uv add <package> # Add dependency uv remove <package> # Remove dependency uv sync # Sync dependencies from lockfile uv lock # Generate lockfile
Running
uv run <command> # Run in project environment uv run python script.py # Run Python script uv run pytest # Run tests
Tools (like pipx)
uvx <tool> # Run tool in ephemeral env uv tool install <tool> # Install tool globally
Python versions
uv python install 3.12 # Install Python version uv python pin 3.12 # Pin version for project
Web Framework: Flask
Use Flask for web applications - lightweight WSGI micro-framework.
Minimal Flask App
app.py
from flask import Flask, render_template, request, jsonify
app = Flask(name)
@app.route("/") def index(): return render_template("index.html")
@app.route("/api/data", methods=["GET", "POST"]) def api_data(): if request.method == "POST": data = request.get_json() return jsonify({"status": "ok", "received": data}) return jsonify({"message": "Hello, API!"})
if name == "main": app.run(debug=True)
Flask Project Structure
my_flask_app/ ├── app.py # Application entry ├── pyproject.toml # uv project config ├── static/ # CSS, JS, images │ ├── css/ │ └── js/ ├── templates/ # Jinja2 templates │ ├── base.html │ └── index.html └── tests/ └── test_app.py
Run Flask
Development
uv run flask run --debug
With specific host/port
uv run flask run --host=0.0.0.0 --port=8080
Project Configuration
pyproject.toml
[project] name = "my-project" version = "0.1.0" description = "Project description" requires-python = ">=3.11" dependencies = [ "flask>=3.0", ]
[project.optional-dependencies] dev = [ "pytest>=8.0", "ruff>=0.5", "mypy>=1.10", ]
[tool.ruff] line-length = 88 target-version = "py311"
[tool.ruff.lint] select = ["E", "F", "I", "UP"]
[tool.mypy] python_version = "3.11" strict = true
[tool.pytest.ini_options] testpaths = ["tests"]
Code Quality
Linting and formatting with ruff
uv run ruff check . # Check for issues uv run ruff check . --fix # Auto-fix issues uv run ruff format . # Format code
Type checking
uv run mypy .
Testing
uv run pytest uv run pytest -v --cov=src
Scripts
-
scripts/init-project.sh
-
Initialize new Python project with standard structure
-
scripts/setup-flask.sh
-
Set up Flask application boilerplate
References
-
See references/uv-commands.md for complete uv reference
-
See references/flask-patterns.md for Flask best practices