Python packaging Cheatsheet

Ezra Cheatsheet

Python Packaging

  • [ ] In your __init__.py files export that classes and functions you want to export.
  • [ ] Create a pypi account
  • [ ] upload your package to github.com
  • [ ] create the files pypi requires
  • setup.py
  • setup.cfg
  • LICENSE
  • README
  • [ ] Upload the package to pypi
  • [ ] Maintain package

init.py file

Dir structure:

MyLib
-__init__.py
-File1.py
-File1.py

init.py

# Inside of __init__.py
from MyLib.File1 import ClassA, ClassB, ClassC
from MyLib.File2 import ClassX, ClassY, ClassZ

Pypi Required Files

setup.py:

from distutils.core import setup
setup(
  name = 'YOURPACKAGENAME',         # How you named your package folder (MyLib)
  packages = ['YOURPACKAGENAME'],   # Chose the same as "name"
  version = '0.1',      # Start with a small number and increase it with every change you make
  license='MIT',        # Chose a license from here: https://help.github.com/articles/licensing-a-repository
  description = 'TYPE YOUR DESCRIPTION HERE',   # Give a short description about your library
  author = 'YOUR NAME',                   # Type in your name
  author_email = 'your.email@domain.com',      # Type in your E-Mail
  url = 'https://github.com/user/reponame',   # Provide either the link to your github or to your website
  download_url = 'https://github.com/user/reponame/archive/v_01.tar.gz',    # I explain this later on
  keywords = ['SOME', 'MEANINGFULL', 'KEYWORDS'],   # Keywords that define your package best
  install_requires=[            # I get to this in a second
          'validators',
          'beautifulsoup4',
          'numpy',
          'Django',
      ],
  classifiers=[
    'Development Status :: 3 - Alpha',      # Chose either "3 - Alpha", "4 - Beta" or "5 - Production/Stable" as the current state of your package
    'Intended Audience :: Developers',      # Define that your audience are developers
    'Topic :: Software Development :: Build Tools',
    'License :: OSI Approved :: MIT License',   # Again, pick a license
    'Programming Language :: Python :: 3',      #Specify which pyhton versions that you want to support
    'Programming Language :: Python :: 3.4',
    'Programming Language :: Python :: 3.5',
    'Programming Language :: Python :: 3.6',
  ],
)
  • download_url -- You have previously uploaded your project to your github repository. Now, we create a new release version of your project on github. This release will then be downloaded by anyone that runs the “pip install YourPackage” command.
  • install_requires -- Here, you define all the dependencies your package has — all the pip packages that you are importing.

setup.cfg

# Inside of setup.cfg
[metadata]
description-file = README.md

Uploading the package to pypi

Now, we create a source distribution with the following command:

$ python setup.py sdist

We will need twine for the upload process, so first install twine via pip:

$ pip install twine

Then, run the following command:

$ twine upload dist/*

You will be asked to provide your username and password. Provide the credentials you used to register to PyPi earlier.

Maintain Package

Simply upload your new code to github, create a new release, then adapt the setup.py file (new download_url — according to your new release tag, new version), then run the setup.py and the twin command again (navigate to your folder first!)

python setup.py sdist
twine upload dist/*

Finally, update your package via pip to see whether your changes worked:

pip install YOURPACKAGE --upgrade