DEV Community

Cover image for Python Checklist: Publishing a package to PyPi
Prahlad Yeri
Prahlad Yeri

Posted on Edited on Originally published at github.com

Python Checklist: Publishing a package to PyPi

(Originally published on https://github.com/prahladyeri/CuratedLists/)

Checklist: Publishing a package to PyPi

  1. Register an account on PyPi if you don't have one.
  2. Install setuptools and twine using pip if they aren't already. Create a setup.py in your source folder as follows (check out setuptools docs for more detailed setup options):

    # replace:
    # <your_package> with your actual package name.
    # <you> with your name.
    # <your_email> with your public email address.
    # <your_github_repo_url> with your github project's url.
    from setuptools import setup, find_packages
    
    s = setup(
        name="<your_package>",
        version="1.0.0",
        license="MIT",
        description="Foo App",
        url='<your_github_repo_url>",
        packages=find_packages(),
        install_requires=[],
        python_requires = ">= 3.4",
        author="<you>",
        author_email="<your_email>",
        )
    
  3. Optional: Bump up the version number (and git commit) if this isn't your first release:

    git add . && git commit -m "chore: released 1.0.1" && git push
    
  4. Run python setup.py sdist from your source folder to generate a source distribution.

  5. Optional: Sign the newly generated package with your gpg signature:

    gpg -a --detach-sign dist/<your-package>-1.0.0.tar.gz
    
  6. Upload your package using twine:

    twine upload dist/<your-package>-1.0.0.tar.gz -u <your-pypi-username> -p <your-pypi-password>
    

    If you've signed the package, then you may also add the signed .asc file as the argument like this:

    twine upload dist/<your-package>-1.0.0.tar.gz dist/<your-package>-1.0.0.tar.gz.asc -u <your-pypi-username> -p <your-pypi-password>
    
  7. Visit https://pypi.org/project/your_package to verify that your package has been uploaded.

  8. Run pip install <your_package> to verify the package installation using pip package manager.

  9. Optional: Tag the commit with the new version number:

    git tag "1.0.1"
    git push --tags
    

Top comments (5)

Collapse
 
themayurkumbhar profile image
MAYUR KUMBHAR •

Is it possible to do it on local without uploading to pypi?

Collapse
 
prahladyeri profile image
Prahlad Yeri •

Sure, just skip everything from point number 5. Instead, just install your locally generated package (*.tar.gz) using pip!

pip install <your-package>-1.0.0.tar.gz
Enter fullscreen mode Exit fullscreen mode

You can even publish this package as a binary setup file on github or just email it to your friends to keep it local.

Collapse
 
juancarlospaco profile image
Juan Carlos • • Edited

No no, your setup.py should be empty, use CFG.

Collapse
 
xowap profile image
Rémy 🤖 •

How would you test against the staging pypi repo before?

Collapse
 
prahladyeri profile image
Prahlad Yeri • • Edited

The twine project is considering to add a --dry-run mode or a staging server but I don't think that has materialized yet.