Troubleshooting¶
This guide covers common issues you might encounter when using this template and how to resolve them.
Setup Issues¶
Pre-commit Hook Installation Fails¶
Problem: pre-commit install returns an error or hooks don't run on commit.
Solutions:
- Ensure you're in the project root directory
- Verify Python virtual environment is activated
-
Reinstall pre-commit:
pip uninstall pre-commit pip install pre-commit pre-commit install pre-commit install --hook-type commit-msg -
Check if
.gitdirectory exists (must be a git repository) - Try running manually:
pre-commit run --all-files
commitlint Not Running¶
Problem: Commit messages aren't validated despite npm install being run.
Solutions:
-
Verify
npm installwas successful:npm list @commitlint/config-angular -
Re-install commitlint dependencies:
npm install --save-dev @commitlint/cli @commitlint/config-angular -
Reinstall pre-commit hooks:
pre-commit install --hook-type commit-msg -
Test manually:
echo "invalid message" | commitlint echo "feat: valid message" | commitlint
Virtual Environment Issues¶
Problem: Packages can't be found or dependencies conflict.
Solutions:
-
Create a fresh virtual environment:
rm -rf .venv python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate -
Upgrade pip:
python -m pip install --upgrade pip -
Install dependencies:
pip install -e ".[dev,docs,test]" -
Verify installation:
python -c "import your_package; print(your_package.__version__)"
Python Version Mismatch¶
Problem: python -m venv .venv fails or tests don't run with wrong Python
version.
Solutions:
-
Check your Python version:
python --version -
Ensure Python 3.10 or higher is installed
-
Use specific Python version when creating venv:
python3.11 -m venv .venv -
Or use uv for version management:
uv venv --python 3.11 source .venv/bin/activate
Testing Issues¶
Pytest Fails to Collect Tests¶
Problem: pytest returns "no tests collected" or import errors.
Solutions:
- Verify test file naming: Must be
test_*.pyor*_test.py - Verify test function naming: Must start with
test_ - Check
__init__.pyexists in test directory:touch tests/__init__.py -
Run pytest with verbose output:
pytest -vv -
Check test discovery:
pytest --collect-only
Import Errors in Tests¶
Problem: Tests can't import your package modules.
Solutions:
-
Install package in development mode:
pip install -e ".[dev,test]" -
Verify package structure (should have
src/your_package/) - Check
pyproject.tomlhas correctpackagesconfiguration - Run from project root directory
- Verify
__init__.pyexists in package directory
Coverage Report Issues¶
Problem: Coverage report shows 0% or missing files.
Solutions:
-
Run pytest with coverage:
pytest --cov=src/your_package --cov-report=html -
Check
.coveragercorpyproject.tomlcoverage settings - Ensure source files have proper imports
- Verify test files import from
src/layout correctly
Pre-commit Hook Issues¶
Hooks Running Too Slowly¶
Problem: Pre-commit takes a very long time or times out.
Solutions:
-
Check which hooks are slow:
pre-commit run --all-files --verbose -
Consider excluding large files:
exclude: | (?x)^( large_data_file.csv| node_modules/ )$ -
Run specific hooks:
pre-commit run ruff --all-files # Just ruff
Formatting Changes After Commit¶
Problem: Pre-commit auto-fixes files, but you didn't expect it.
Solutions:
- This is normal behavior - review the changes
-
Stage the new changes:
git add . git commit -m "your message" # Try again -
Modify tool settings if behavior is unwanted (in
pyproject.toml) -
Disable specific hooks temporarily:
SKIP=ruff pre-commit run --all-files
"Unstaged Changes" After Running Hooks¶
Problem: Pre-commit modified files but they're not staged.
Solutions:
-
This is expected - review changes:
git diff -
Stage the changes:
git add . -
Try committing again
- Or use
git add -Ato stage all changes before commit
CI/CD Issues¶
CI Workflow Fails on Push¶
Problem: GitHub Actions workflow fails unexpectedly.
Solutions:
- Check the Actions tab in GitHub for error details
-
Run tests locally first:
pytest pre-commit run --all-files -
Common causes:
- Dependency installation failed: Check
pip install -e ".[dev,docs,test]" - Python version mismatch: Verify Python versions in workflow matrix
- Missing dependencies: Add to
pyproject.toml - Pre-commit failures: Fix locally first
- Dependency installation failed: Check
-
Re-run failed jobs from GitHub Actions UI
CodeQL Analysis Takes Too Long¶
Problem: CI is slow due to CodeQL analysis.
Solutions:
- This is normal (~2-3 minutes per run)
- To disable CodeQL:
- Remove the
codeqljob from.github/workflows/CI.yml - Keep Bandit in pre-commit for basic security
- Remove the
- Or check if it's necessary for your project
- CodeQL provides value for security-critical projects
Release Workflow Fails¶
Problem: Release or publish workflow doesn't work.
Solutions:
- Verify tag format matches pattern:
v[0-9]+.[0-9]+.[0-9]+*- Good:
v1.0.0,v1.2.3-alpha - Bad:
1.0.0,release-1.0.0
- Good:
- Check CI workflow passed first (required by release workflow)
- Verify git-cliff configuration in
cliff.toml - For publishing:
- Check trusted publishers are configured in PyPI
- Or verify API tokens are set as secrets
- See CI/CD guide - PyPI Publishing
Documentation Issues¶
Zensical Site Won't Build¶
Problem: zensical serve or zensical build fails.
Solutions:
-
Verify Zensical is installed:
pip install -e ".[docs]" -
Check
zensical.tomlsyntax (must be valid TOML) - Verify markdown files exist and paths are correct
- Check for circular includes or missing includes
-
Run with verbose output:
zensical build --verbose
Documentation Not Updating on GitHub Pages¶
Problem: You pushed changes but the docs aren't updated online.
Solutions:
- Verify GitHub Pages is enabled:
- Go to repository Settings → Pages
- Under "Build and deployment", select "GitHub Actions" as the source
- This allows the documentation workflow to deploy directly
- Check documentation workflow ran successfully:
- Go to Actions tab
- Look for "Deploy Zensical documentation to Pages" workflow
- Verify changes were pushed to the correct branch
- Wait 1-2 minutes for Pages to build
- Hard refresh browser (Ctrl+Shift+R or Cmd+Shift+R)
- Check browser cache isn't serving old version
API Documentation Not Generating¶
Problem: API reference pages are empty or show errors.
Solutions:
-
Verify docstrings are present in your code:
def my_function(): """This is a docstring.""" pass -
Check mkdocstrings plugin is installed:
pip install mkdocstrings[python] -
Verify navigation in
zensical.tomlincludes API section -
Check
gen_ref_pages.pyscript ran successfully:python docs/gen_ref_pages.py -
Ensure modules are properly imported in
__init__.py
Dependencies & Package Issues¶
"ModuleNotFoundError" When Running CLI¶
Problem: Running your-package --help fails with module not found.
Solutions:
-
Install package in development mode:
pip install -e "." -
Verify entry points in
pyproject.toml:[project.scripts] your-package = "your_package.cli.main:app" -
Check the specified function exists and is callable
-
Verify package name doesn't use hyphens in the module name:
- Package:
your-package(inpyproject.toml) - Module:
your_package(directory name)
- Package:
Dependency Conflicts¶
Problem: pip install fails with conflict messages.
Solutions:
-
Check Python version:
python --version -
Create fresh virtual environment:
rm -rf .venv && python -m venv .venv source .venv/bin/activate -
Upgrade pip:
python -m pip install --upgrade pip -
Install with verbose output to see conflict:
pip install -e ".[dev,docs,test]" -vv -
Check
pyproject.tomlfor overly restrictive version constraints
Newer Version of Tool Breaks Things¶
Problem: Pre-commit hooks or tools updated and now fail.
Solutions:
-
Check what changed:
pre-commit autoupdate --dry-run -
Update individual tool:
pre-commit autoupdate --repo https://github.com/tool-repo -
Test changes:
bash pre-commit run --all-files -
Pin to known-good version in
.pre-commit-config.yaml:rev: v1.0.0 # Specific version instead of latest
Getting Help¶
If you encounter issues not listed here:
- Check existing issues: Search GitHub Issues for your problem
- Review logs carefully: Error messages usually point to the root cause
- Search documentation: Many issues are covered in specific tool docs
- Try minimal reproduction: Isolate the problem to a single file/command
- Ask for help: Open an issue with:
- Your environment (Python version, OS)
- Steps to reproduce
- Full error message/logs
- What you've already tried