Simple Pypackage¶
A clean, automated setup for publishing simple Python packages to PyPI and Anaconda.
Setup¶
Prepare GitHub Repo¶
- Create new GitHub repository / fork this repository
- Setup PyPI and Anaconda Credentials in repository secrets
PYPI_USER: PyPI username (use__token__for API key authentication)PYPI_PASSWORD: PyPI password (use token including thepypi-prefix for API key authentication)ANACONDA_API_TOKEN: Anaconda API token- After first release: Go to
Settingsand activate your GitHub Pages using thegh-pagesbranch
Edit Files¶
- Rename
simple_pypackagefolder to your package name - Replace all
simple-pypackage,simple_pypackage,ppeetteerrsandPeter Yuenwith your package name, package slug, username and author name in these files:.devcontainer.jsonmkdocs.yamlREADME.mdsetup.py.github/workflows/build.yamlconda-recipe/meta.yaml{project_name}/__init__.py
- Change your minimum Python version in
setup.py,.github/workflows/build.yamland.github/workflows/upload.yaml
GitHub Workflow¶
- On push / pull request to
mainbranch:- Try to build PyPI and Conda packages
- Run
pytestandcodecovon 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.jsonwith my favourite setup is included <3. UseVSCode => Reopen in containerto use it if desired.
Usage¶
Important Gotchas¶
- Make sure all product dependencies are available on both
conda-forgeandpypi - Repo version tags must be of the format
vX.Y.Zwith lowercasev - 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
devorfeaturebranches. 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
docsdirectory. - Improve setup.py: You can add
description,package_data,classifiersandkeywordsto yoursetup.py.