Python Packaging and Distribution
Introduction
Python packaging is essential for distributing your Python projects. It allows you to bundle your code, dependencies, and metadata into a single package that can be easily shared and installed.
Key Concepts
- Package: A directory that contains a special file named __init__.py along with other modules.
- Distribution: A package that can be installed, usually as a .whl or .tar.gz file.
- Metadata: Information about your package like name, version, author, and dependencies.
Creating a Package
To create a package, follow these steps:
- Create a directory for your package.
- Add your Python modules.
- Create a
setup.py
file. - Include a README file.
Example Structure
my_package/
├── my_module.py
├── __init__.py
├── setup.py
└── README.md
Content of setup.py
from setuptools import setup, find_packages
setup(
name='my_package',
version='0.1',
packages=find_packages(),
install_requires=[],
author='Your Name',
description='A simple example package',
)
Distributing Packages
To distribute your package, you can use setuptools
and twine
. Follow these steps:
- Build your package:
- Upload to PyPI using Twine:
python setup.py sdist bdist_wheel
twine upload dist/*
Best Practices
Always include a
requirements.txt
file for dependencies.- Use semantic versioning.
- Maintain a changelog.
- Write clear documentation.
- Test your package before distribution.
FAQ
What is the difference between a package and a module?
A module is a single Python file, while a package is a directory that can contain multiple modules.
How do I install a package?
You can install a package from PyPI using pip:
pip install package_name
What is Twine?
Twine is a command-line utility for publishing Python packages on PyPI.