
Python Packaging and Publishing to PyPI: A Step-by-Step Guide
Packages are essential to Python’s thriving environment. Whether you work in web development, automation, or data science, it’s likely that a reusable module will make your job easier. However, what if you wish to make your Python library publicly available?
This tutorial demonstrates how to professionally and reusablely create, package, and submit your own Python project to PyPI, the Python Package Index.
What is PyPI?
The official repository for Python packages is called PyPI (Python Package Index). It enables developers to use pip to install libraries:
pip install your-package-name
Publishing to PyPI enables anyone to use your package with a single command. Let’s dive in.
Step 1: Structure Your Project Properly
A clean project structure is crucial for packaging. Here’s a standard layout:
your_package/
├── your_package/
│ ├── __init__.py
│ └── core.py
├── tests/
│ └── test_core.py
├── README.md
├── LICENSE
├── setup.py
├── pyproject.toml
├── MANIFEST.in
└── requirements.txt
Let’s break it down:
your_package/
(inner): contains your actual Python code.tests/
: holds your unit tests.setup.py
: metadata and installation script.pyproject.toml
: build configuration file.README.md
: long description shown on PyPI.LICENSE
: choose MIT, Apache 2.0, or another.requirements.txt
: list of dependencies.
Step 2: Create setup.py
Here’s a basic template for setup.py
:
from setuptools import setup, find_packages
setup(
name='your-package-name',
version='0.1.0',
author='Your Name',
author_email='your.email@example.com',
description='A short description of your package',
long_description=open('README.md').read(),
long_description_content_type='text/markdown',
url='https://github.com/yourusername/your-package',
packages=find_packages(),
install_requires=[
'requests', # Example dependency
],
classifiers=[
'Programming Language :: Python :: 3',
'License :: OSI Approved :: MIT License',
],
python_requires='>=3.7',
)
Step 3: Add pyproject.toml
(Recommended)
Since PEP 517/518, modern packaging recommends pyproject.toml
:
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
Step 4: Build Your Package
Use build
to create distributable .tar.gz
and .whl
files:
pip install build
python -m build
This creates a dist/
directory with your package files.
Step 5: Create a PyPI Account
- Go to https://pypi.org/account/register/
- Verify your email.
- Create an API token:
- Go to https://pypi.org/manage/account/
- Scroll to API tokens
- Click Add API token
🚀 Step 6: Upload Using Twine
Install twine, a secure uploader:
pip install twine
Upload your package:
twine upload dist/*
You’ll be prompted to enter your username (__token__
) and API token.
Bonus: Test on TestPyPI Before Real Release
TestPyPI is a sandbox environment:
twine upload --repository testpypi dist/*
Install from TestPyPI:
pip install --index-url https://test.pypi.org/simple/ your-package-name
Best Practices
- Use MAJOR.MINOR.PATCH (e.g., 1.0.1) for semantic versioning.
- For the project description, include README.md.
- Use unittest or pytest to create unit tests.
- For CI/CD automation, use GitHub Actions.
- Give your code the proper license (MIT is popular).
- Use examples and docstrings to document your code.
Common Errors
Error | Solution |
---|---|
403 Invalid or non-existent authentication information | Check API token, username must be __token__ |
File already exists | Bump the version in setup.py |
long_description_content_type error | Ensure README.md uses markdown |
Conclusion
You just went through the entire Python publishing and packaging process. PyPI makes it easy to share your work, regardless of whether you’re developing a tool for the global community or for yourself.
Python Full Stack Developer Salary in Dubai: A Lucrative Career Path
Leave a Reply