Publish Package to PyPI
In this blog we will walk through how to publish packages to PyPI.org.
Prerequisites
The very first requirement is to have an account on PyPI.
We need to install 3 tools globally
- wheel
- setuptools
- twine
pip3 install setuptools wheel twine
Getting Started
We will be publishing the `covin-cli` project to PyPI.
- As a best practice create a high level directory with the same name as our package name in our case covin-cli.
- Now create a __init__.py file in covin-cli directory so that Python will see our code as a package.
❯ cd covin-cli
❯ tree
.
└── covin-cli
└── __init__.py1 directory, 1 file
- Now you can add your code in a Python file.
- We need to add 3 files to publish the package to PyPI to the root directory in-order to publish a package to PyPI. setup.py, LICENSE, README
Setup.py
README.org or README.md
A well written README describing about your code.
LICENSE
You can go to https://choosealicense.com/ and choose license which you want to have.
Generate Packages
Now we need to generate 2 packages sdist(Source Distribution) and bdist_wheel (Build Distribution)
python3 setup sdist bdist_wheel
Above command will generate 2 directories build
and dist
in the dist directory we will have wheel file which is build distribution and a source distribution.
❯ tree
├── dist
│ ├── covin_cli-1.0-py3-none-any.whl
│ └── covin-cli-1.0.tar.gz0 directories, 2 files
Now the final step is to upload to PyPI. We will use twine
to upload our packages
❯ twine upload dist/* --verbose
Uploading distributions to https://upload.pypi.org/legacy/
dist/covin_cli-1.0-py3-none-any.whl (16.5 KB)
dist/covin-cli-1.0.tar.gz (4.5 KB)
Enter your username: abhishekamralkar
Enter your password:
Uploading covin_cli-1.0-py3-none-any.whl
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 25.0k/25.0k [00:08<00:00, 3.02kB/s]
Uploading covin-cli-1.0.tar.gz
Once the package uploaded it will be available at
https://pypi.org/project/covin-cli/1.0/
To install
❯ pip3 install covin-cli==1.0
Defaulting to user installation because normal site-packages is not writeable
Collecting covin-cli==1.0
Using cached covin_cli-1.0-py3-none-any.whl (16 kB)
Installing collected packages: covin-cli
Successfully installed covin-cli-1.0
To Uninstall
❯ pip3 uninstall covin-cli==1.0
Found existing installation: covin-cli 1.0
Uninstalling covin-cli-1.0:
Would remove:
/home/aaa/.local/lib/python3.7/site-packages/covin-cli/*
/home/aaa/.local/lib/python3.7/site-packages/covin_cli-1.0.dist-info/*
Proceed (y/n)?