Create and publish distributable scientific Python packages following Scientific Python community best practices with pyproject.toml, src layout, and Hatchling. Use when building Python libraries, publishing to PyPI, structuring research software, creating command-line tools, or preparing packages for distribution. Ideal for package metadata configuration, dependency management, and automated publishing workflows.
View on GitHubuw-ssec/rse-plugins
scientific-python-development
January 22, 2026
Select agents to install to:
npx add-skill https://github.com/uw-ssec/rse-plugins/blob/main/plugins/scientific-python-development/skills/python-packaging/SKILL.md -a claude-code --skill python-packagingInstallation paths:
.claude/skills/python-packaging/# Scientific Python Packaging A comprehensive guide to creating, structuring, and distributing Python packages for scientific computing, following the [Scientific Python Community guidelines](https://learn.scientific-python.org/development/guides/packaging-simple/). This skill focuses on modern packaging standards using `pyproject.toml`, PEP 621 metadata, and the Hatchling build backend. ## Quick Decision Tree **Package Structure Selection:** ``` START ├─ Pure Python scientific package (most common) → Pattern 1 (src/ layout) ├─ Need data files with package → Pattern 2 (data/ subdirectory) ├─ CLI tool → Pattern 5 (add [project.scripts]) └─ Complex multi-feature package → Pattern 3 (full-featured) ``` **Build Backend Choice:** ``` START → Use Hatchling (recommended for scientific Python) ├─ Need VCS versioning? → Add hatch-vcs plugin ├─ Simple manual versioning? → version = "X.Y.Z" in pyproject.toml └─ Dynamic from __init__.py? → [tool.hatch.version] path ``` **Dependency Management:** ``` START ├─ Runtime dependencies → [project] dependencies ├─ Optional features → [project.optional-dependencies] ├─ Development tools → [dependency-groups] (PEP 735) └─ Version constraints → Use >= for minimum, avoid upper caps ``` **Publishing Workflow:** ``` 1. Build: python -m build 2. Check: twine check dist/* 3. Test: twine upload --repository testpypi dist/* 4. Verify: pip install --index-url https://test.pypi.org/simple/ pkg 5. Publish: twine upload dist/* ``` **Common Task Quick Reference:** ```bash # Setup new package mkdir -p my-pkg/src/my_pkg && cd my-pkg # Create pyproject.toml with [build-system] and [project] sections # Development install pip install -e . --group dev # Build distributions python -m build # Test installation pip install dist/*.whl # Publish twine upload dist/* ``` ## When to Use This Skill - Creating scientific Python libraries for distribution - Building research software packages with proper structure - Publishing scie