# Python Tooling Explained

Explanation pages give the context behind Python's tooling: what concepts mean, why standards exist, how tools compare, and what trade-offs they make. They are for reading, not doing.

To set up a tool, start with a [Tutorial]({{< ref "handbook/Tutorial/" >}}). To solve a specific problem, see the [How-To guides]({{< ref "handbook/How To/" >}}).

The groups below organize concepts, tool comparisons, PEPs and standards, coming-from-another-language guides, and opinionated philosophy pieces.

- [uv: A Complete Guide to Python's Fastest Package Manager](https://pydevtools.com/handbook/explanation/uv-complete-guide.md)
- [ty: A Complete Guide to Python's Fastest Type Checker](https://pydevtools.com/handbook/explanation/ty-complete-guide.md)
- [Ruff: A Complete Guide to Python's Fastest Linter and Formatter](https://pydevtools.com/handbook/explanation/ruff-complete-guide.md)
- [Claude Code for Python: A Complete Guide](https://pydevtools.com/handbook/explanation/claude-code-complete-guide.md)
- [Why Doesn't the Authoritative Python Packaging Guide Mention the Best Thing that's Happened to Python Packaging?](https://pydevtools.com/handbook/explanation/uv-not-in-ppug.md)
- [Can you trust uv long-term?](https://pydevtools.com/handbook/explanation/can-you-trust-uv-long-term.md)
- [Getting Started with Python Using Codex](https://pydevtools.com/handbook/explanation/codex-complete-guide.md)
- [Do I need a project to use uv?](https://pydevtools.com/handbook/explanation/do-i-need-a-project-to-use-uv.md)
- [Do you still need tox or nox if you use uv?](https://pydevtools.com/handbook/explanation/do-you-still-need-tox-or-nox-if-you-use-uv.md)
- [Does Poetry Support Python Standards for Dependency Management?](https://pydevtools.com/handbook/explanation/poetry-python-dependency-management.md)
- [Does Ruff support type checking?](https://pydevtools.com/handbook/explanation/does-ruff-support-type-checking.md)
- [Enough Git to Supervise Your AI Coding Agent](https://pydevtools.com/handbook/explanation/enough-git-to-supervise-your-ai-coding-agent.md)
- [Essential pytest Plugins for Reliable, Fast Test Suites](https://pydevtools.com/handbook/explanation/essential-pytest-plugins.md)
- [How do I ship a Python application to end users?](https://pydevtools.com/handbook/explanation/how-do-i-ship-a-python-application-to-end-users.md)
- [How do pyenv and uv compare for Python interpreter management?](https://pydevtools.com/handbook/explanation/how-do-pyenv-and-uv-compare-for-python-interpreter-management.md)
- [How do Python type checkers compare?](https://pydevtools.com/handbook/explanation/how-do-mypy-pyright-and-ty-compare.md)
- [How do Ruff and Pylint compare?](https://pydevtools.com/handbook/explanation/how-do-ruff-and-pylint-compare.md)
- [How do uv and Poetry compare?](https://pydevtools.com/handbook/explanation/how-do-uv-and-poetry-compare.md)
- [How do uv tool and pipx compare?](https://pydevtools.com/handbook/explanation/how-do-uv-tool-and-pipx-compare.md)
- [How Does Hot Reloading Work in Python?](https://pydevtools.com/handbook/explanation/how-does-hot-reloading-work-in-python.md)
- [How mypy, ty, and Pyrefly handle untyped code](https://pydevtools.com/handbook/explanation/how-mypy-ty-and-pyrefly-handle-untyped-code.md)
- [How Python Package Formats Evolved: From tar.gz to .whl](https://pydevtools.com/handbook/explanation/how-python-package-formats-evolved.md)
- [How Python tools adopt uv under the hood](https://pydevtools.com/handbook/explanation/how-python-tools-adopt-uv-under-the-hood.md)
- [Is Conda actually free?](https://pydevtools.com/handbook/explanation/is-conda-actually-free.md)
- [Modern Python Project Setup Guide for AI Assistants](https://pydevtools.com/handbook/explanation/modern-python-project-setup-guide-for-ai-assistants.md)
- [Python Tooling for C# Developers](https://pydevtools.com/handbook/explanation/python-tooling-for-csharp-developers.md)
- [Python Tooling for Go Developers](https://pydevtools.com/handbook/explanation/python-tooling-for-go-developers.md)
- [Python Tooling for Java Developers](https://pydevtools.com/handbook/explanation/python-tooling-for-java-developers.md)
- [Python Tooling for Node.js Developers](https://pydevtools.com/handbook/explanation/python-tooling-for-nodejs-developers.md)
- [Python Tooling for PHP Developers](https://pydevtools.com/handbook/explanation/python-tooling-for-php-developers.md)
- [Python Tooling for Ruby Developers](https://pydevtools.com/handbook/explanation/python-tooling-for-ruby-developers.md)
- [Python Tooling for Rust Developers](https://pydevtools.com/handbook/explanation/python-tooling-for-rust-developers.md)
- [Python Tooling for TypeScript Developers](https://pydevtools.com/handbook/explanation/python-tooling-for-typescript-developers.md)
- [Running Python on Serverless](https://pydevtools.com/handbook/explanation/about-running-python-on-serverless.md)
- [Sampling vs deterministic profilers: which should I use?](https://pydevtools.com/handbook/explanation/sampling-vs-deterministic-profilers.md)
- [Should I run `python setup.py`?](https://pydevtools.com/handbook/explanation/should-i-run-python-setuppy-commands.md)
- [Should I use Homebrew to install Python?](https://pydevtools.com/handbook/explanation/should-i-use-homebrew-to-install-python.md)
- [src layout vs flat layout: which to use and why](https://pydevtools.com/handbook/explanation/src-layout-vs-flat-layout.md)
- [ty vs Pyrefly: which Python type checker should you pick?](https://pydevtools.com/handbook/explanation/ty-vs-pyrefly.md)
- [Understanding dependency groups in uv](https://pydevtools.com/handbook/explanation/understanding-dependency-groups-in-uv.md)
- [Understanding the Conda/Anaconda Ecosystem](https://pydevtools.com/handbook/explanation/understanding-the-conda-anaconda-ecosystem.md)
- [uv for Non-Python Teams](https://pydevtools.com/handbook/explanation/uv-for-non-python-teams.md)
- [uv init: project types, flags, and examples](https://pydevtools.com/handbook/explanation/understanding-uv-init-project-types.md)
- [uv vs pixi vs conda for Scientific Python](https://pydevtools.com/handbook/explanation/uv-vs-pixi-vs-conda-for-scientific-python.md)
- [Versioning Python packages: SemVer, CalVer, and PEP 440](https://pydevtools.com/handbook/explanation/versioning-python-packages-semver-calver-and-pep-440.md)
- [What are Optional Dependencies and Dependency Groups?](https://pydevtools.com/handbook/explanation/what-are-optional-dependencies-and-dependency-groups.md)
- [What Are Wheel Variants?](https://pydevtools.com/handbook/explanation/what-are-wheel-variants.md)
- [What Happens When You Run `uv run`](https://pydevtools.com/handbook/explanation/what-happens-when-you-run-uv-run.md)
- [What is a .python-version file?](https://pydevtools.com/handbook/explanation/what-is-a-python-version-file.md)
- [What is a build backend?](https://pydevtools.com/handbook/explanation/what-is-a-build-backend.md)
- [What is a build frontend?](https://pydevtools.com/handbook/explanation/what-is-a-build-frontend.md)
- [What is a lockfile?](https://pydevtools.com/handbook/explanation/what-is-a-lock-file.md)
- [What is a PEP?](https://pydevtools.com/handbook/explanation/pep.md)
- [What is a Python application?](https://pydevtools.com/handbook/explanation/what-is-a-python-application.md)
- [What is a Python Interpreter?](https://pydevtools.com/handbook/explanation/what-is-a-python-interpreter.md)
- [What is a Python language server?](https://pydevtools.com/handbook/explanation/what-is-a-python-language-server.md)
- [What is a Python module?](https://pydevtools.com/handbook/explanation/what-is-a-python-module.md)
- [What is a Python package?](https://pydevtools.com/handbook/explanation/what-is-a-python-package.md)
- [What Is a Python Supply Chain Attack?](https://pydevtools.com/handbook/explanation/what-is-a-python-supply-chain-attack.md)
- [What is a version specifier?](https://pydevtools.com/handbook/explanation/what-is-a-version-specifier.md)
- [What is a Virtual Environment?](https://pydevtools.com/handbook/explanation/what-is-a-virtual-environment.md)
- [What Is an Editable Install?](https://pydevtools.com/handbook/explanation/what-is-an-editable-install.md)
- [What is core metadata?](https://pydevtools.com/handbook/explanation/what-is-core-metadata.md)
- [What is CPython's JIT Compiler?](https://pydevtools.com/handbook/explanation/what-is-cpythons-jit-compiler.md)
- [What is PEP 484?](https://pydevtools.com/handbook/explanation/what-is-pep-484.md)
- [What is PEP 503?](https://pydevtools.com/handbook/explanation/what-is-pep-503.md)
- [What is PEP 508?](https://pydevtools.com/handbook/explanation/what-is-pep-508.md)
- [What is PEP 517/518 compatibility?](https://pydevtools.com/handbook/explanation/what-is-pep-517.md)
- [What is PEP 541 (Package Index Name Retention)?](https://pydevtools.com/handbook/explanation/what-is-pep-541.md)
- [What is PEP 561?](https://pydevtools.com/handbook/explanation/what-is-pep-561.md)
- [What is PEP 604?](https://pydevtools.com/handbook/explanation/what-is-pep-604.md)
- [What is PEP 609?](https://pydevtools.com/handbook/explanation/what-is-pep-609.md)
- [What is PEP 612?](https://pydevtools.com/handbook/explanation/what-is-pep-612.md)
- [What is PEP 621?](https://pydevtools.com/handbook/explanation/what-is-pep-621-compatibility.md)
- [What is PEP 649?](https://pydevtools.com/handbook/explanation/what-is-pep-649.md)
- [What is PEP 660?](https://pydevtools.com/handbook/explanation/what-is-pep-660.md)
- [What is PEP 668?](https://pydevtools.com/handbook/explanation/what-is-pep-668.md)
- [What is PEP 681?](https://pydevtools.com/handbook/explanation/what-is-pep-681.md)
- [What is PEP 688?](https://pydevtools.com/handbook/explanation/what-is-pep-688.md)
- [What is PEP 695?](https://pydevtools.com/handbook/explanation/what-is-pep-695.md)
- [What is PEP 703?](https://pydevtools.com/handbook/explanation/what-is-pep-703.md)
- [What is PEP 723?](https://pydevtools.com/handbook/explanation/what-is-pep-723.md)
- [What is PEP 735?](https://pydevtools.com/handbook/explanation/what-is-pep-735.md)
- [What is PEP 740?](https://pydevtools.com/handbook/explanation/what-is-pep-740.md)
- [What is PEP 751?](https://pydevtools.com/handbook/explanation/what-is-pep-751.md)
- [What is PEP 772?](https://pydevtools.com/handbook/explanation/what-is-pep-772.md)
- [What is PEP 773?](https://pydevtools.com/handbook/explanation/what-is-pep-773.md)
- [What is PEP 779?](https://pydevtools.com/handbook/explanation/what-is-pep-779.md)
- [What is PEP 8?](https://pydevtools.com/handbook/explanation/what-is-pep-8.md)
- [What is PEP 810?](https://pydevtools.com/handbook/explanation/what-is-pep-810.md)
- [What is PEP 829?](https://pydevtools.com/handbook/explanation/what-is-pep-829.md)
- [What is PyPA (Python Packaging Authority)?](https://pydevtools.com/handbook/explanation/what-is-pypa.md)
- [What is PyPI (Python Package Index)?](https://pydevtools.com/handbook/explanation/what-is-pypi.md)
- [What is Python?](https://pydevtools.com/handbook/explanation/what-is-python.md)
- [What is the GIL?](https://pydevtools.com/handbook/explanation/what-is-the-gil.md)
- [What's the difference between a distribution package and an import package?](https://pydevtools.com/handbook/explanation/distribution-package-vs-import-package.md)
- [What's the difference between pip and uv?](https://pydevtools.com/handbook/explanation/whats-the-difference-between-pip-and-uv.md)
- [When should I choose pixi over uv?](https://pydevtools.com/handbook/explanation/when-should-i-choose-pixi-over-uv.md)
- [When to Use `uv run` vs `uvx`](https://pydevtools.com/handbook/explanation/when-to-use-uv-run-vs-uvx.md)
- [Which Python package manager should I use?](https://pydevtools.com/handbook/explanation/which-python-package-manager-should-i-use.md)
- [Why are there so many Python packaging tools?](https://pydevtools.com/handbook/explanation/why-are-there-so-many-python-packaging-tools.md)
- [Why did uv originally use Hatch as a build backend?](https://pydevtools.com/handbook/explanation/why-does-uv-use-hatch-as-a-backend.md)
- [Why doesn't Python just fix packaging?](https://pydevtools.com/handbook/explanation/why-doesnt-python-just-fix-packaging.md)
- [Why Installing a Python Package Can Run Code](https://pydevtools.com/handbook/explanation/why-installing-a-python-package-can-run-code.md)
- [Why Installing GPU Python Packages Is So Complicated](https://pydevtools.com/handbook/explanation/installing-cuda-python-packages.md)
- [Why is Python Slow?](https://pydevtools.com/handbook/explanation/why-is-python-slow.md)
- [Why pylock.toml Includes Digital Attestations](https://pydevtools.com/handbook/explanation/why-pylock-toml-includes-digital-attestations.md)
- [Why should I avoid using the system Python?](https://pydevtools.com/handbook/explanation/why-should-i-avoid-system-python.md)
- [Why should I choose Conda?](https://pydevtools.com/handbook/explanation/why-should-i-choose-conda.md)
- [Why Should I Choose pyproject.toml over requirements.txt for managing dependencies?](https://pydevtools.com/handbook/explanation/pyproject-vs-requirements.md)
- [Why should I use a virtual environment?](https://pydevtools.com/handbook/explanation/why-should-i-use-a-virtual-environment.md)
- [Why use native uv commands instead of uv pip](https://pydevtools.com/handbook/explanation/why-use-native-uv-over-uv-pip.md)
- [Why Use Trusted Publishing for PyPI?](https://pydevtools.com/handbook/explanation/why-use-trusted-publishing-for-pypi.md)
- [Why You Should Try uv if You Use Python](https://pydevtools.com/handbook/explanation/why-you-should-try-uv-if-you-use-python.md)
