Pip: Usar pip install por meio de repositório privado protegido por .htaccess?

Criado em 15 mar. 2011  ·  21Comentários  ·  Fonte: pypa/pip

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


auto-locked enhancement

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 /


Original Comment By: Jannis Leidel

Todos 21 comentários

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.

Esta página foi útil?
0 / 5 - 0 avaliações