As part of a Continuous Integration pipeline, I'm trying to build a Python wheel file from a repository, upload it to a custom devpi server, and run tests on the wheel file from there.
One method I've tried is to build and upload the wheel file in one line with setuptools, but this returns a 404 Not Found message.
Working on Windows, my .pypirc is at C:\Users\buildbot\.pypirc
[distutils]
index-servers =
staging
[staging]
repository: http://pypi/root/staging
username: buildbot
password: 12345678
From the root of my project repo, I try to build and upload with:
python.exe .\setup.py bdist_wheel upload --repository http://pypi/root/staging
But, while the wheel is placed in dist\proj-20141216.2.dev0-py2-none-any.whl
just fine, the upload step results in:
running upload Submitting C:\var\buildminion\build_proj-dev\build\dist\proj-20141216.2.dev0-py2-none-any.whl to
http://pypi/root/staging
Upload failed (404): Not Found
Running setuptools register
results in a similar:
Registering snail to
http://pypi/root/staging
Server response (404): Not Found
I know that the devpi server is running correctly, because I can upload the file manually with
devpi use http://pypi/root/staging
devpi login buildbot --password 12345678
devpi upload dist\proj-20141216.2.dev0-py2-none-any.whl
Any ideas why setuptools upload
doesn't work?
Also, is there anyway of using this upload feature without a .pypirc (or of automatically populating that file)? In the future, I would like to be able to automatically provision buildbot minions, and that's an extra bit of configuration I'd avoid if I could.
If there's no way of making this work, I can script the manual upload using devpi. I would like the same CI code to work for multiple versions of multiple projects, so it would be easier if I didn't have to write code to match against a wheel filename. This is why I would prefer to use setuptools upload
. Does pip
have any upload capabilities?
The issue is the url, for setup.py you need the trailing '/' so change your config to:
[distutils]
index-servers =
staging
[staging]
repository: http://pypi/root/staging/
username: buildbot
password: 12345678
and you would likeley have to register the projec, which was a tripping point for me:
python.exe .\setup.py bdist_wheel register -r staging
python.exe .\setup.py bdist_wheel upload -r staging