Skip to content

Instantly share code, notes, and snippets.

Last active February 23, 2023 15:03
Show Gist options
  • Save audreyfeldroy/5990987 to your computer and use it in GitHub Desktop.
Save audreyfeldroy/5990987 to your computer and use it in GitHub Desktop.
My PyPI Release Checklist
  • Update
  • Commit the changes:
git add
git commit -m "Changelog for upcoming release 0.1.1."
  • Update version number (can also be minor or major)
bumpversion patch
  • Install the package again for local development, but with the new version number:
python develop
  • Run the tests:
  • Submit a pull request with the history and version number changes. Have it reviewed and merged.
  • Release on PyPI by uploading both sdist and wheel:
python sdist upload
python bdist_wheel upload
  • Test that it pip installs:
pip install my_project
<try out my_project>
  • Push: git push
  • Push tags: git push --tags
  • Check the PyPI listing page to make sure that the README, release notes, and roadmap display properly. If not, copy and paste the RestructuredText into to find out what broke the formatting.
  • Edit the release on GitHub (e.g. Paste the release notes into the release's release page, and come up with a title for the release.
Copy link

@audreyr, I've tried to automate this awesome checklist with changes.
Thanks for the inspiration 😄.
Also for cookiecutter 😍

Copy link

mgedmin commented Apr 27, 2014

tox already builds and installs an sdist (unless you tell it not to), so you could simplify this a little bit.

You can check for ReST errors before making a release with python --long-description | rst2html, or by running restview --long-description --strict.

I've a checklist very much like yours that I've tried to automate as much as I can, so I can do a make release when I'm tired and not mess things up. Thank you for sharing yours!

Copy link

You might want to upload to PyPi as wheel format.

Copy link

Thanks so much for this, @audreyr! You're a 🌟!

I've added a separate reminder to register if this is a first release:

python register -r pypi

(since otherwise a sdist upload will, rightly, yield a 403).

Copy link

I'm trying out a simplified checklist ( -- will be bringing that into here soon most likely.

Copy link

The simplified checklist is now in.

Also good catch @chrisvoncsefalvay about registering the package if it's the 1st release.

Copy link

Awesome, straight to the point, checklist.

Wouldn't you want to bump the version up before committing?

Copy link

jpeyret commented Feb 23, 2016

Awesome checklist. Thanks for this and the wonderful
some remarks from the perspective of a pypi noob.

PyPI's own doc is quite comprehensive @ [](Packaging and Distributing Project)

They suggest you can use their test repo before working on the actual pypi repo. Worked very well for me.
They also advise using twine rather than upload (or register for that matter). Reason is cleartext credentials on the wire. Additionally, twine lets you build the dists locally before uploading.

So the workflow is:
python bdist sdist

Upload to pypitest
twine upload dist/* -r pypitest

Upload to real pypi
twine upload dist/* -r pypi -u -p

Last, this guy had a pretty good write up about packaging Not sure I am 100% clean yet, but with all of this, and copying from sqlalchemy's, I am well under way.

Thanks again.

Copy link

This is an old gist, and I'm new to all of this. But isn't it odd to first commit your changes, then update version number in files and build the package, and then push the changes? Aren't you missing out on the version changes and the new build?

Copy link

You can also use twine to securely upload to Pypi :twine upload dist/*

Copy link

zertrin commented May 14, 2018

@BramVanroy no, because bumpversion creates another commit just for the version change. So in total you have one commit for the History changes, and one for the version bump.

Copy link

klieret commented May 3, 2019

Great list! Suggestion for an additional check: Run twine check dist/* after python sdist to run some additional checks (for example that the markdown/rst on pypi will render properly etc).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment