How To Upload PyGamma Wheels

This document describes how to upload PyGamma wheels to PyPI.

Note. Once you load a version to PyPI, the same version can NOT be reloaded. So be careful.

*Just FYI - One workaround is to upload ‘release candidate' versions, e.g. if you upload 1.2.15rc1 initially you can still upload 1.2.15 later. *


As of this writing (March 2021), uploading wheels requires some help from 3rd party packages. See the "One-time Setup Steps" section below if you have not already set these packages up, yet.

If you find these steps to be too much trouble, remember that you can always upload the wheel files to scion instead. That would create a small inconvenience for the user.

If the PyGamma wheels are on PyPI, the user can type pip install pygamma and pip will find and install the right version of PyGamma for the user's system.

If the PyGamma wheels are on not PyPI, the user will have to download the correct wheel file for their system and then run pip install pygamma-xxxxx.whl.


Some of the information in this document comes from here:


This document assumes the following –

  • You have already built the PyGamma wheels
  • You have an account on the test PyPI
  • You have an account on the production (real) PyPI
  • You have followed the one-time setup steps in this document (see below)

Uploading Wheels to Test PyPI

Upload to the test PyPI if you want, type:

twine upload --repository testpypi dist/*

You can find this upload at

To use this test version to upgrade your version of PyGamma, type:

pip install --index-url pygamma --upgrade

Uploading Wheels to PyPI (production)

When you feel ready, upload to the production PyPI, type:

twine upload dist/*

You can find this upload at

It's perfectly OK to upload just one file, e.g.

twine upload dist/pygamma-4.3.3-cp27-cp27mu-manylinux1_i686.whl

If twine isn't in your PATH, try using python -m twine instead of just twine.

Changing Metadata

If you change any of the metadata in (e.g. the description, maintainer email, etc.), you'll need to rerun the register step for that information to appear on PyPI.

The metadata is stored in the PyGamma.egg-info directory that's a sibling of In my experience it gets overwritten when one runs the register step. If you're feeling paranoid, you might want to delete that directory by hand after a metadata change.

If this does not work, then doing a full twine upload will also update any metadata. You can use a throw-away version number like 0.9.dev10 to test this on TestPyPI.

One-time Setup Steps

These are steps that only need to be done once, not every time you upload a wheel.

Install twine

Because Python tools are not where they need to be yet, we need to rely on a 3rd party package called twine. Install it like so –

pip install twine

Create the PyPI Config File

Create the file .pypirc in your home directory and populate it with the text below, replacing the stuff in .


repository =
username = <your test user name goes here>

repository =
username = <your production user name goes here>

You can also include your password in that file, but that means your password will be stored in plain text on your hard drive. I cannot recommend this.

If you don't put your password in .pypirc, you'll be prompted for it when you run register or use twine to upload wheels.

Register the Project

Register on the test PyPI first:

python register -r test

If that goes well, you can register on the production (real) PyPI:

python register