How to use PyPi to distribute Python packages

Related: Replace setup.py with pyproject.toml


Minimal PyPi setup.py

  1. assuming your package is named myprogram, have a directory structure like
    setup.py
    myprogram/
        __init__.py
    
  2. A minimal setup.py for PyPi contains something like:
    #!/usr/bin/env python
    from setuptools import setup, find_packages
    
    setup(name='myprogram',
       packages=find_packages(),
       version = '0.1.0',
       description='My program is 2x faster and 1/3 the size of Hello World.',
       long_description=open('README.rst').read(),
       author = 'Author Name',
       url = 'https://github.com/username/myprogram',
       classifiers=[
       'Development Status :: 4 - Beta',
       'Programming Language :: Python',
       ],
       install_requires=['numpy','matplotlib>=2.1'],
       python_requires='>=3.4',
       )
    

    Pick from the list of classifiers suitable for your project.

PyPi upload

  1. Sign up for PyPi account. It may take several hours to get the confirmation email.
  2. create ~/.pypirc with the content
    [distutils]
    index-servers =
       pypi
    
    [pypi]
    repository=https://pypi.python.org/pypi
    username=<your pypi username>
    

    Note that I did NOT save my password for security.

  3. In your Python package directory that you want to upload
    python setup.py sdist bdist_wheel upload
    

Now your package is live to the world on PyPi. Anyone can install it via

python -m pip install myprogram

Notes:

  • you MUST increment the version number for each release, or PyPi will not let you upload

Error workarounds

error: Upload failed (400): Binary wheel ‘*-cp36-cp36m-linux_x86_64.whl’ has an unsupported platform tag ‘linux_x86_64’.

You can workaround this by not uploading the wheel, just the source code and your users will compile it on their machine.

python setup.py sdist upload

Leave a Comment