Advanced Topics
Packaging and Distribution
Creating and distributing Python packages professionally
Interview: Library development and DevOps
Python's packaging ecosystem has matured significantly. The modern approach uses pyproject.toml as the single configuration file, replacing the older setup.py and setup.cfg approach.
Modern Project Structure
The src-layout (putting your package inside a src/ directory) is recommended. It prevents accidentally importing the uninstalled version during development.
Key Tools
- build: PEP 517 build frontend — generates sdist and wheel
- twine: Upload packages to PyPI
- Poetry/PDM/uv: All-in-one tools for dependency management and publishing
- hatchling: Modern build backend used by many popular projects
Use Cases
Distributing open-source libraries on PyPI
Internal package registries for organizations
Creating CLI tools with entry points
Managing complex dependency graphs in large projects
Common Mistakes
Still using setup.py instead of pyproject.toml
Not pinning dependency versions or using version ranges
Forgetting to include a LICENSE file in the package
Not using src/ layout — causes import issues during development