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

18 7

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.

The Most Contextual AI Development Assistant

Pieces.app image

Our centralized storage agent works on-device, unifying various developer tools to proactively capture and enrich useful materials, streamline collaboration, and solve complex problems through a contextual understanding of your unique workflow.

👥 Ideal for solo developers, teams, and cross-company projects

Learn more

👋 Kindness is contagious

Explore a sea of insights with this enlightening post, highly esteemed within the nurturing DEV Community. Coders of all stripes are invited to participate and contribute to our shared knowledge.

Expressing gratitude with a simple "thank you" can make a big impact. Leave your thanks in the comments!

On DEV, exchanging ideas smooths our way and strengthens our community bonds. Found this useful? A quick note of thanks to the author can mean a lot.

Okay