Python Code Convention
1. Target Audience
Developers building Python services, tools, or pipelines.
2. Coding Style
Follow PEP 8 style. Key rules:
Indentation and Line Length
- 4 spaces (no tabs)
- Max 79 characters per line
Imports
- Group in order: standard lib → third-party → internal
- One import per line
Whitespace
- Space around operators and after commas
- No space inside brackets
Naming Conventions
- Variables/functions:
snake_case
- Classes:
PascalCase
- Constants:
ALL_CAPS
- Protected/private:
_name
,__name
Comments & Docstrings
- Use docstrings for all public code
- Use complete sentences
- Add
# TODO:
or# NOTE:
where needed
3. Project Structure & Environment
Use modern Python project tools for clarity and maintainability:
Tool | Use Case |
---|---|
poetry | Dependency & virtualenv manager |
uv | Fast pip & venv alternative |
conda | (Optional) Data/ML workflows |
Recommended Layout
your_project/
├── pyproject.toml
├── src/
│ └── your_module/
└── tests/
Using
src/
layout helps prevent import issues and improves test isolation.
4. Path Handling
Always avoid abspath
. Use pathlib
with relative paths.
❌ Not recommended:
import os
path = os.path.abspath(os.path.join(os.path.dirname(__file__), "file.txt"))
✅ Recommended:
from pathlib import Path
path = Path(__file__).parent / "file.txt"
5. Linting & Formatting
Use ruff
with pre-commit
.
Setup Steps
-
Install:
pip install pre-commit
-
Create
.pre-commit-config.yaml
:repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: trailing-whitespace
- id: check-yaml
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.11.8
hooks:
- id: ruff -
Install hooks:
pre-commit install
Ruff Config (pyproject.toml
)
[tool.ruff]
select = ["E", "F"]
ignore = ["E501"] # Ignore line length for now
Usage
ruff check src/
ruff check src/ --fix
6. Editor Integration
Visual Studio Code
- Enable Format on Save
- Install the Ruff extension
7. Python Version
All code should support Python 3.11+. Set it explicitly in pyproject.toml
:
[tool.poetry.dependencies]
python = ">=3.11"
8. Testing Conventions
- Use
pytest
- Place tests in the
tests/
directory - Name tests
test_*.py
- Test function names should describe expected behavior
Example:
def test_parse_valid_config():
...
9. Logging and Config Management
Use the team's standardized logging and config templates:
- Import from our shared utility module
- Follow the documented interfaces in the shared repo
🧩 [PLACEHOLDER: Insert internal repo link or code snippet here] Example usage:
from our_utils.logging import get_logger
from our_utils.config import load_config
10. Git Ignore Rules
Common .gitignore
entries:
.venv/
__pycache__/
*.py[cod]
.ruff_cache/
.mypy_cache/