Ensure version numbers in setup.py and doc/qr.1 have been updated.
Check twine and wheel are up to date:
pip install --upgrade twine wheel
Delete contents of
dist/:rm -r dist
Package it up:
python setup.py sdist bdist_wheel
Sign it:
gpg --detach-sign -a dist/*.gz gpg --detach-sign -a dist/*.whl
Upload it:
twine upload dist/*