Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

Upload source distributions to your PyPI server.

Project Description

Upload source distributions of your requirements to your PyPI server.

The problem

If you are using a custom PyPI server as a proxy and want to upload some packages there, it’s not easy. For each package, you need to download its source and upload it using script:

# Uploading requests==2.0.0
$ git clone
$ cd requests
$ git checkout v2.0.0
# Assuming you have 'internal' index-server configured in your '~/.pypirc'.
$ python sdist upload -r internal
# Uploading coverage==3.5
$ cd ..
$ git clone
$ cd coveragepy
$ git checkout coverage-3.5
$ python sdist upload -r internal

You could also download the packages directly into the PyPI’s index directory.

$ ssh
$ pip install requests==2.0.0 coverage==3.5 -d ~/.packages

If there’s more than one package, you could use a requirements file.

$ scp requirements.txt
$ ssh
$ pip install -r requirements.txt -d ~/.packages

But it’s still too much. You should be able to do it with one command. And what if you don’t have SSH access to the PyPI server host?

The solution

One command for download and upload.

Upload packages by name

$ pypiupload packages mock==1.0.1 requests==2.2.1 -i internal

Upload packages from requirements file

$ pypiupload requirements requirements.txt -i internal

Upload source distribution files

$ pypiupload files packages/mock-1.0.1.tar.gz \
  packages/requests-2.2.1-py2.py3-none-any.whl -i internal

More options

$ pypiupload --help
$ pypiupload <command> --help

Supported PyPI servers

Tested only on pypiserver.


Install from PyPI:

$ pip install pypi-uploader

Or go to the root directory with script and install it:

$ python install


Documentation is available at


PyPI Uploader is licensed under the MIT license.


Version 1.1.0

  • Adapt to newer versions of pip: use pip download instead of pip install for downloading packages, and --no-binary :all: instead of --no-use-wheel to not use wheel archives.

Version 1.0.0

  • Added --no-use-wheel option

Version 0.1.0

First release

Issues and contributing

Please report any issues on GitHub at

Or contribute by submitting a pull request with your changes following these rules:

  • Follow PEP 8 rules
  • Follow PEP 257 rules
  • Follow The Zen of Python
  • Test your commits
  • Write meaningful commit messages
  • Keep the documentation up-to-date

To run tests and build the docs, you have to install additional packages:

$ python develop
$ pip install -r requirements_dev.txt

Running tests:

$ tox

Building documentation:

$ cd docs
$ make html

Release History

This version
History Node


History Node


History Node


History Node


Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, Size & Hash SHA256 Hash Help File Type Python Version Upload Date
(19.4 kB) Copy SHA256 Hash SHA256
Source None Apr 29, 2017

Supported By

Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Google Google Cloud Servers