# Building and Distributing Packages with Setuptools

The first step towards sharing a Python library or program is to build a distribution package [1]. This includes adding a set of additional files containing metadata and configuration to not only instruct `setuptools` on how the distribution should be built but also to help installer (such as pip) during the installation process.

This document contains information to help Python developers through this process. Please check the Quickstart for an overview of the workflow.

Also note that `setuptools` is what is known in the community as build backend, user facing interfaces are provided by tools such as pip and build. To use `setuptools`, one must explicitly create a `pyproject.toml` file as described Build System Support.

## Contents

- Quickstart
- Package Discovery and Namespace Packages
- Dependencies Management in Setuptools
- Development Mode (a.k.a. “Editable Installs”)
- Entry Points
- Data Files Support
- Building Extension Modules
- Specifying Your Project’s Version
- Controlling files in the distribution
- Caching and Troubleshooting
- Extending or Customizing Setuptools
- Configuring setuptools using `setup.cfg` files
- Configuring setuptools using `pyproject.toml` files

—

Notes

[1]

A Distribution Package is also referred in the Python community simply as “package” Unfortunately, this jargon might be a bit confusing for new users because the term package can also to refer any directory (or sub directory) used to organize modules and auxiliary files.