Oi,
Eu gostaria de proteger um repositório de índice Python privado com o arquivo ".htaccess".
Quando uso pip
para instalar algum pacote deste repositório, recebo este erro:
Getting page http://pypi.is-webdesign.com/simple/
Could not fetch URL http://pypi.is-webdesign.com/simple/: HTTP Error 401: Unauthorized
Como posso usar os parâmetros de login / senha com pip?
Pip não suporta esse recurso? Se não está planejado?
Cumprimentos,
Stephane
pip suporta autenticação básica por meio de seu URLOpener,
http://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -67
Basta usar um URL como http: // nome de usuário: senha @ servidor / qualquer /
Original Comment By: Jannis Leidel
Com a versão 0.8.1 pip posso fazer:
pip install -f http://username:[email protected]/simple/ my_package
Não sei se esse recurso está documentado ou não.
Eu vou olhar isso logo.
Atenciosamente, Stephane
Original Comment By: Stéphane Klein
Jannis, tentei como você disse, mas não funcionou para mim ao usar HTTPS.
Alguém pode confirmar isso para mim? É um bug conhecido?
Obrigado! :-)
Original Comment By: Guilherme Gondim
Posso confirmar que não funciona com https. Estou tendo o erro a seguir:
Traceback (most recent call last):
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages / pip-0.6.3-py2.6.egg / pip / basecommand.py ", linha 115, no principal
self.run(options, args)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages / pip-0.6.3-py2.6.egg / pip / comandos / install.py ", linha 155, em execução
requirement_set.install_files(finder, force_root_egg_info=self.bundle,
bundle = self.bundle)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages / pip-0.6.3-py2.6.egg / pip / req.py ", linha 823, em install_files
url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages / pip-0.6.3-py2.6.egg / pip / index.py ", linha 55, em find_requirement
page = self._get_page(main_index_url, req)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages / pip-0.6.3-py2.6.egg / pip / index.py ", linha 282, em _get_page
return HTMLPage.get_page(link, req, cache=self.cache)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages / pip-0.6.3-py2.6.egg / pip / index.py ", linha 363, em 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
As versões mais recentes do pip parecem lançar o seguinte erro ao usar um nome de usuário
e senha:
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-
packages / pip-0.8.1-py2.6.egg / pip / index.py ", linha 241, em _get_queued_page
page = self._get_page(location, req)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages / pip-0.8.1-py2.6.egg / pip / index.py ", linha 326, em _get_page
return HTMLPage.get_page(link, req, cache=self.cache)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages / pip-0.8.1-py2.6.egg / pip / index.py ", linha 424, em get_page
content_type = cls._get_content_type(url)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages / pip-0.8.1-py2.6.egg / pip / index.py ", linha 486, em _get_content_type
resp = urlopen(req)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages / pip-0.8.1-py2.6.egg / pip / download.py ", linha 88, na chamada
response = self.get_response(url)
File "/home/ian/.virtualenvs/test/lib/python2.6/site-
packages / pip-0.8.1-py2.6.egg / pip / download.py ", linha 107, em 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
O problema ocorre quando o pip tenta fazer uma solicitação principal no arquivo, mas
atinge um 401. https://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -86
O url passado para self.get_response () é um objeto urllib2.Request, mas
get_response () tenta chamar urlsplit () nele. que lança o erro acima.
O arquivo parece ser baixado.
Original Comment By: Ian Lewis
Parece que isso foi corrigido, eu tenho um índice privado em HTTPS + autenticação básica e ele funciona apenas com --index-url https://user:[email protected]
.
Alguém pode confirmar isso e encerrar o problema?
Acabei de adicionar uma solicitação pull (https://github.com/pypa/pip/pull/786) vinculada a este tópico.
@brutasse posso confirmar. Fechar isso?
1.5.6 ainda tem o problema.
Podemos confirmar exatamente o problema que está sendo discutido agora?
Desculpa. Funciona para mim. Meu erro :-D
Em 18 de julho de 2014, às 5h20, "Matt Iversen" [email protected] escreveu:
Podemos confirmar exatamente o problema que está sendo discutido agora?
-
Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/pypa/pip/issues/51#issuecomment -49406680.
Ainda é necessário colocar o nome de usuário e senha no URL?
É compatível com pip==6.0.8
?
Eu uso o índice PyPI privado e executo a instalação assim:
pip install <my_package> --cert=<required_for_some_reason> --extra-index-url https://username:[email protected]/simple/ --allow-all-external
e então funciona, mas pede o nome de usuário e a senha interativamente. Não é o caso quando este script é executado fora do shell com CLI.
Confirme se ele está relacionado ao problema discutido aqui ou sugira se devo criar outro problema ou indique a solução.
@vladignatyev Acabei de ter o mesmo problema que você mencionou, de pedir usuário / senha interativamente. Reduzi o problema para ter um símbolo na senha que precisa de codificação de url. Se eu não codificar a senha por url, a URL não poderá ser analisada. Se eu fizer a codificação url da senha, acho que pip não está decodificando a url antes de tentar autenticar.
Eu também tenho esse problema com o pip 7.1.2. Há um símbolo na senha que precisa de codificação de url, pip falha ao autenticar (obtém uma resposta 401) e solicita nome de usuário / senha interativamente. Em seguida, funciona bem se eu inserir o usuário / senha interativamente. Como @bcbrown , suspeito que não seja a decodificação de url da senha.
CORRIGIR ESTE ASAP PIP 8.1.2
Acabei de encontrar isso usando 9.0.3
.... Isso ainda é um problema sério?
A análise do nome de usuário / senha do URL só funciona quando a porta é especificada.
(Pelo menos no Debian 9, Python 2.7.13, pip 18.1, mas eu tive esse problema também em outros sistemas)
Esta consulta de nome de usuário / senha: pip install -f https://user:[email protected]/pkgs requests
Isso funciona: pip install -f https://user:[email protected]:443/pkgs requests
Funciona com o pip 18.1, mas não funciona na versão mais recente (19.1). Confirmado após reverter para 18.1, funciona.
A análise do nome de usuário / senha do URL só funciona quando a porta é especificada.
(Pelo menos no Debian 9, Python 2.7.13, pip 18.1, mas eu tive esse problema também em outros sistemas)Esta consulta de nome de usuário / senha:
pip install -f https://user:[email protected]/pkgs requests
Isso funciona:pip install -f https://user:[email protected]:443/pkgs requests
@olt Eu tive o mesmo problema ao usar o pip 19.1.1 e consegui fazê-lo funcionar colocando a porta como você sugeriu. Solução bastante obscura, gostaria de poder votar mais a favor da sua resposta.
Comentários muito úteis
pip suporta autenticação básica por meio de seu URLOpener,
http://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -67
Basta usar um URL como http: // nome de usuário: senha @ servidor / qualquer /