Simple Pypackage

A clean, automated setup for publishing simple Python packages to PyPI and Anaconda.

action pypi anaconda platform codecov docs

Setup

Prepare GitHub Repo

  1. Create new GitHub repository / fork this repository
  2. Setup PyPI and Anaconda Credentials in repository secrets
  3. PYPI_USER: PyPI username (use __token__ for API key authentication)
  4. PYPI_PASSWORD: PyPI password (use token including the pypi- prefix for API key authentication)
  5. ANACONDA_API_TOKEN: Anaconda API token
  6. After first release: Go to Settings and activate your GitHub Pages using the gh-pages branch

Edit Files

  • Rename simple_pypackage folder to your package name
  • Replace all simple-pypackage, simple_pypackage, ppeetteerrs and Peter Yuen with your package name, package slug, username and author name in these files:
    • .devcontainer.json
    • mkdocs.yaml
    • README.md
    • setup.py
    • .github/workflows/build.yaml
    • conda-recipe/meta.yaml
    • {project_name}/__init__.py
  • Change your minimum Python version in setup.py, .github/workflows/build.yaml and .github/workflows/upload.yaml

GitHub Workflow

  • On push / pull request to main branch:
    • Try to build PyPI and Conda packages
    • Run pytest and codecov on all OS types
  • On release created:
    • Build and publish package to PyPI and Anaconda (version is automatically inferred from repo tag)
    • Update docs

Docker Dev Container

  • A .devcontainer.json with my favourite setup is included <3. Use VSCode => Reopen in container to use it if desired.

Usage

Important Gotchas

  • Make sure all product dependencies are available on both conda-forge and pypi
  • Repo version tags must be of the format vX.Y.Z with lowercase v
  • If GitHub Actions are not triggering, check here to make sure it is not because of an outrage.
  • Upload to Codecov might fail if you commit your repository too fast after creation / if you have not logged in to Codecov via GitHub. Just re-run the GitHub action in that case.

Things You Can Do

  • Conda Description: Write a longer and better description for conda-recipe/meta.yaml.
  • Extra Branches: Separate into dev or feature branches. You might want to add GitHub Action triggers to push / pull requests to those branches.
  • Tests: Write tests in pytest. Other testing framework would require minor changes.
  • Documentation: Write some nice documentation in the docs directory.
  • Improve setup.py: You can add description, package_data, classifiers and keywords to your setup.py.