Reputation: 11026
We use our own python package index at my office, and we're trying to add a new one. When I try to specify both indices at the same time, I get prompted to log in, but if I use only one at a time I don't.
For example:
$ pip install --user --upgrade \
--extra-index-url https://<api token>:@packagecloud.io/2rs2ts/oldrepo/pypi/simple \
--extra-index-url https://<other api token>:@packagecloud.io/2rs2ts/newrepo/pypi/simple \
mypackage
Collecting mypackage
User for packagecloud.io:
But if I specify just one of either of those --extra-index-url
arguments then I download my package just fine.
I'm 99% certain that I am passing the arguments correctly, since it's specified with an append
action in the source. So I think the problem is that both of these index URLs are from packagecloud.io
... but I could be wrong. Either way, how can I use both of my repos?
Upvotes: 25
Views: 106507
Reputation: 11026
Apparently this is a bug in pip. The HTTP basic auth information is not stored correctly when specifying multiple --extra-index-url
s that point to the same domain. I filed an issue, but in the meantime, there is a workaround. By specifying one of the --extra-index-url
s as the --index
instead, and adding PyPI as an --extra-index-url
, I was able to download my package successfully:
$ pip install --user --upgrade \
--index https://<api token>:@packagecloud.io/2rs2ts/oldrepo/pypi/simple \
--extra-index-url https://<other api token>:@packagecloud.io/2rs2ts/newrepo/pypi/simple \
--extra-index-url https://pypi.python.org/simple \
mypackage
Collecting mypackage
Downloading https://packagecloud.io/2rs2ts/newrepo/pypi/packages/mypackage-1.0.0-py2-none-any.whl (52kB)
etc. etc.
Edit: a fix for this problem has been merged and made available as of pip 21.2 (I think; I haven't tried because this hasn't been relevant to me in a while.) If you are experiencing this issue, try updating pip first before using my workaround, since my workaround will only let you get one extra use of the domain.
Upvotes: 30
Reputation: 20467
You can also use the environment variable PIP_EXTRA_INDEX_URL
. And then you have to use space as delimiter.
export PIP_EXTRA_INDEX_URL="https://user:token@repo-a/ https://user:token@repo-b/"
pip install
I found something about env vars here in the docs. Based on the example about PIP_FIND_LINKS
, I tried space and it worked.
Upvotes: 15
Reputation: 3662
--extra-index-url
accepts a list (it should probably be called --extra-index-urls). Try adding your URLs comma separated, like this:
pip install --user --upgrade \
--extra-index-url https://<api token>:@packagebutt.io/2rs2ts/oldrepo/pypi/simple, \
https://<other api token>:@packagebutt.io/2rs2ts/newrepo/pypi/simple \
mypackage
Upvotes: -1