你好,
我想用“.htaccess”文件保护一个私有的 Python 索引存储库。
当我使用pip
从这个存储库安装一些包时,我有这个错误:
Getting page http://pypi.is-webdesign.com/simple/
Could not fetch URL http://pypi.is-webdesign.com/simple/: HTTP Error 401: Unauthorized
如何在 pip 中使用登录名/密码参数?
Pip 不支持此功能? 如果不是它的计划?
问候,
斯蒂芬妮
pip 通过其 URLOpener 支持基本身份验证,
http://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -67
只需使用像http://username:password@server/whatever/这样的 URL
Original Comment By: Jannis Leidel
使用 0.8.1 pip 版本我可以:
pip install -f http://username:[email protected]/simple/ my_package
我不知道这个功能是否被记录在案。
我会尽快看看。
问候, 斯蒂芬
Original Comment By: Stéphane Klein
Jannis,我按照你说的试了,但是在使用 HTTPS 时它对我不起作用。
有人可以帮我确认一下吗? 这是一个已知的错误吗?
谢谢! :-)
Original Comment By: Guilherme Gondim
我可以确认它不适用于 https。 我收到以下错误:
Traceback (most recent call last):
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
包/pip-0.6.3-py2.6.egg/pip/basecommand.py”,第115行,在主
self.run(options, args)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
包/pip-0.6.3-py2.6.egg/pip/commands/install.py", line 155, in run
requirement_set.install_files(finder, force_root_egg_info=self.bundle,
捆绑= self.bundle)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
package/pip-0.6.3-py2.6.egg/pip/req.py”,第 823 行,在 install_files 中
url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
包/pip-0.6.3-py2.6.egg/pip/index.py”,第 55 行,在 find_requirement 中
page = self._get_page(main_index_url, req)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
包/pip-0.6.3-py2.6.egg/pip/index.py”,第 282 行,在 _get_page
return HTMLPage.get_page(link, req, cache=self.cache)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
包/pip-0.6.3-py2.6.egg/pip/index.py”,第363行,在get_page
resp = urllib2.urlopen(url)
File "/usr/lib/python2.6/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.6/urllib2.py", line 391, in open
response = self._open(req, data)
File "/usr/lib/python2.6/urllib2.py", line 409, in _open
'_open', req)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 1169, in https_open
return self.do_open(httplib.HTTPSConnection, req)
File "/usr/lib/python2.6/urllib2.py", line 1107, in do_open
h = http_class(host, timeout=req.timeout) # will parse host:port
File "/usr/lib/python2.6/httplib.py", line 1101, in __init__
HTTPConnection.__init__(self, host, port, strict, timeout)
File "/usr/lib/python2.6/httplib.py", line 657, in __init__
self._set_hostport(host, port)
File "/usr/lib/python2.6/httplib.py", line 682, in _set_hostport
raise InvalidURL("nonnumeric port: '%s'" % host[i+1:])
InvalidURL: nonnumeric port: '[email protected]'
Original Comment By: Ian Lewis
使用用户名时,较新版本的 pip 似乎会引发以下错误
和密码:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner
self.run()
File "/usr/lib/python2.6/threading.py", line 484, in run
self.__target(*self.__args, **self.__kwargs)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
包/pip-0.8.1-py2.6.egg/pip/index.py”,第 241 行,在 _get_queued_page
page = self._get_page(location, req)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
包/pip-0.8.1-py2.6.egg/pip/index.py”,第326行,在_get_page
return HTMLPage.get_page(link, req, cache=self.cache)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
包/pip-0.8.1-py2.6.egg/pip/index.py”,第424行,在get_page
content_type = cls._get_content_type(url)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
包/pip-0.8.1-py2.6.egg/pip/index.py”,第 486 行,在 _get_content_type 中
resp = urlopen(req)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
包/pip-0.8.1-py2.6.egg/pip/download.py”,第 88 行,调用中
response = self.get_response(url)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
包/pip-0.8.1-py2.6.egg/pip/download.py”,第 107 行,在 get_response
scheme, netloc, path, query, frag = urlparse.urlsplit(url)
File "/usr/lib/python2.6/urlparse.py", line 147, in urlsplit
i = url.find(':')
File "/usr/lib/python2.6/urllib2.py", line 218, in __getattr__
raise AttributeError, attr
AttributeError: find
当 pip 尝试对存档文件执行 head 请求但
命中 401。https : //bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -86
传递给 self.get_response() 的 url 是一个 urllib2.Request 对象,但是
get_response() 尝试在其上调用 urlsplit()。 抛出上述错误。
该文件似乎已下载。
Original Comment By: Ian Lewis
看起来这是固定的,我在 HTTPS + 基本身份验证下有一个私有索引,它只适用于--index-url https://user:[email protected]
。
有人可以确认这一点并关闭问题吗?
刚刚添加了一个链接到这个主题的拉取请求(https://github.com/pypa/pip/pull/786)。
@brutasse我可以确认。 关闭这个?
1.5.6 还是有问题。
我们能否准确确认现在正在谈论的问题?
对不起。 为我工作。 我的错误:-D
2014 年 7 月 18 日凌晨 5:20,“Matt Iversen”通知@ github.com 写道:
我们能否准确确认现在正在谈论的问题?
—
直接回复此邮件或在 GitHub 上查看
https://github.com/pypa/pip/issues/51#issuecomment -49406680。
还需要在 URL 中输入用户名和密码吗?
pip==6.0.8
吗?
我使用私有 PyPI 索引并像这样运行安装:
pip install <my_package> --cert=<required_for_some_reason> --extra-index-url https://username:[email protected]/simple/ --allow-all-external
然后它可以工作,但是交互地要求输入用户名和密码。 当此脚本在外壳之外使用 CLI 运行时,情况并非如此。
请确认它是否与此处讨论的问题有关,或者建议我是否应该创建另一个问题,或者请指出解决方案。
@vladignatyev我刚刚遇到了你提到的同样问题,它以交互方式要求用户/密码。 我将问题缩小到密码中有一个需要 url 编码的符号。 如果我不对密码进行 url 编码,则无法解析 URL。 如果我对密码进行 url 编码,我认为 pip 在尝试进行身份验证之前不会对其进行 url 解码。
pip 7.1.2 也有这个问题。 密码中有一个需要 url 编码的符号,pip 无法进行身份验证(获得 401 响应)并以交互方式提示输入用户名/密码。 如果我以交互方式输入用户/密码,它就可以正常工作。 像@bcbrown一样,我怀疑它不是对密码进行 url 解码。
请尽快修复这个 PIP 8.1.2
刚刚使用9.0.3
遇到了这个问题......这仍然是一个严重的问题吗?
从 URL 解析用户名/密码仅在指定端口时有效。
(至少在 Debian 9、Python 2.7.13、pip 18.1 上,但我在其他系统上也有这个问题)
查询用户名/密码: pip install -f https://user:[email protected]/pkgs requests
这有效: pip install -f https://user:[email protected]:443/pkgs requests
这适用于 pip 18.1,但在最新版本 (19.1) 中损坏,在恢复到 18.1 后确认它可以工作。
从 URL 解析用户名/密码仅在指定端口时有效。
(至少在 Debian 9、Python 2.7.13、pip 18.1 上,但我在其他系统上也有这个问题)查询用户名/密码:
pip install -f https://user:[email protected]/pkgs requests
这有效:pip install -f https://user:[email protected]:443/pkgs requests
@olt我在使用 pip 19.1.1 时遇到了同样的问题,并设法通过按照您的建议放置端口来使其工作。 相当模糊的解决方法,我希望我能更多地支持你的答案。
最有用的评论
pip 通过其 URLOpener 支持基本身份验证,
http://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -67
只需使用像http://username:password@server/whatever/这样的 URL