Skip to main content

Upload wheels to any cloud storage supported by Libcloud

Project description

Upload/download wheels to/from cloud storage using Apache Libcloud. Helps package maintainers build wheels for their packages and upload them to PyPI.

The cloud storage containers are typically populated by Continuous Integration servers that generate and test binary packages on various platforms (Windows and OSX for several versions and architectures for Python). At release time the project maintainer can collect all the generated package for a specific version of the project and upload them all at once to PyPI.

Installation

pip install wheelhouse-uploader

Usage

The canonical use case is:

  1. Continuous Integration (CI) workers build and test the project packages for various platforms and versions of Python, for instance using the commands:

[STRIKEOUT:bash pip install wheel python setup.py bdist_wheel]

  1. CI workers use wheelhouse-uploader to upload the generated artifacts to one or more cloud storage containers (e.g. one container per platform, or one for the master branch and the other for release tags):

[STRIKEOUT:bash python -m wheelhouse_uploader upload container_name]

  1. The project maintainer uses the wheelhouse-uploader distutils extensions to fetch all the generated build artifacts for a specific version number to its local dist folder and upload them all at once to PyPI when making a release.

[STRIKEOUT:bash python setup.py sdist fetch_artifacts upload_all]

Uploading artifact to a cloud storage container

Use the following command:

python -m wheelhouse_uploader upload \
    --username=mycloudaccountid --secret=xxx \
    --local-folder=dist/ my_wheelhouse

or:

export WHEELHOUSE_UPLOADER_USERNAME=mycloudaccountid
export WHEELHOUSE_UPLOADER_SECRET=xxx
python -m wheelhouse_uploader upload --local-folder dist/ my_wheelhouse

When used in a CI setup such as http://travis-ci.org or http://appveyor.com, the environment variables are typically configured in the CI configuration files such as .travis.yml or appveyor.yml. The secret API key is typically encrypted and exposed with a secure: prefix in those files.

The files in the dist/ folder will be uploaded to a container named my_wheelhouse on the CLOUDFILES (Rackspace) cloud storage provider.

You can pass a custom --provider param to select the cloud storage from the list of supported providers.

Assuming the container will be published as a static website using the cloud provider CDN options, the upload command also maintains an index.html file with links to all the files previously uploaded to the container.

It is recommended to configure the container CDN cache TTL to a shorter than usual duration such as 15 minutes to be able to quickly perform a release once all artifacts have been uploaded by the CI servers.

Fetching artifacts manually

The following command downloads items that have been previously published to a web page with an index with HTML links to the project files:

python -m wheelhouse_uploader fetch \
    --version=X.Y.Z --local-folder=dist/ \
    project-name http://wheelhouse.example.org/

Uploading previously archived artifacts to PyPI (deprecated)

DEPRECATION NOTICE: while the following still works, you are advised to use the alternative tool: twine that makes it easy to script uploads of packages to PyPI without messing around with distutils and setup.py.

Ensure that the setup.py file of the project registers the wheelhouse-uploader distutils extensions:

cmdclass = {}

try:
    # Used by the release manager of the project to add support for:
    # python setup.py sdist fetch_artifacts upload_all
    import wheelhouse_uploader.cmd
    cmdclass.update(vars(wheelhouse_uploader.cmd))
except ImportError:
    pass
...

setup(
    ...
    cmdclass=cmdclass,
)

Put the URL of the public artifact repositories populated by the CI workers in the setup.cfg file of the project:

[wheelhouse_uploader]
artifact_indexes=
    http://wheelhouse.site1.org/
    http://wheelhouse.site2.org/

Fetch all the artifacts matching the current version of the project as configured in the local setup.py file and upload them all to PyPI:

python setup.py fetch_artifacts upload_all

Note: this will reuse PyPI credentials stored in $HOME/.pypirc if python setup.py register or upload were called previously.

TODO

  • test on as many cloud storage providers as possible (please send an email to olivier.grisel@ensta.org if you can make it work on a non-Rackspace provider),

  • check that CDN activation works everywhere (it’s failing on Rackspace currently: need to investigate) otherwise the workaround is to enable CDN manually in the management web UI,

  • make it possible to fetch private artifacts using the cloud storage protocol instead of HTML index pages.

Project details


Download files

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

Source Distribution

wheelhouse-uploader-0.9.7.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

wheelhouse_uploader-0.9.7-py2.py3-none-any.whl (14.5 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file wheelhouse-uploader-0.9.7.tar.gz.

File metadata

File hashes

Hashes for wheelhouse-uploader-0.9.7.tar.gz
Algorithm Hash digest
SHA256 cbbf6a02e59dae00ab1a7bddfc52fddca72422b17eec9e3df2b7315a8530ac3a
MD5 91f3fbf4566e0673cccd6bcd3e4f86f2
BLAKE2b-256 caa0f1ace854b67c1b1c2afddac6c5a2d07494a0c243bf33e8b1c35c9ba1a6ba

See more details on using hashes here.

File details

Details for the file wheelhouse_uploader-0.9.7-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for wheelhouse_uploader-0.9.7-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 07a07e9872823195612497370ff9a35f66966f4b6dae63ace79de182b858613b
MD5 e6a74959e1e10875b0de23f4192a1fdc
BLAKE2b-256 1340f25f29d4373ca4c369f50397e41fd84e0bb6eea6b538582adb4a0db8a2bc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page