Pip: ¿Usar pip install a través de un repositorio privado protegido por .htaccess?

Creado en 15 mar. 2011  ·  21Comentarios  ·  Fuente: pypa/pip

Hola,

Me gustaría proteger un repositorio privado de Python Index con un archivo ".htaccess".

Cuando uso pip para instalar algún paquete de este repositorio, tengo este error:

Getting page http://pypi.is-webdesign.com/simple/
Could not fetch URL http://pypi.is-webdesign.com/simple/: HTTP Error 401: Unauthorized

¿Cómo puedo usar los parámetros de inicio de sesión / contraseña con pip?

¿Pip no admite esta función? ¿Si no está planeado?

Saludos,
Stephane


auto-locked enhancement

Comentario más útil

pip admite autenticación básica a través de su URLOpener,
http://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -67

Simplemente use una URL como http: // nombre de usuario: contraseña @ servidor / lo que sea /


Original Comment By: Jannis Leidel

Todos 21 comentarios

pip admite autenticación básica a través de su URLOpener,
http://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -67

Simplemente use una URL como http: // nombre de usuario: contraseña @ servidor / lo que sea /


Original Comment By: Jannis Leidel

Con la versión 0.8.1 pip puedo hacer:

pip install -f http://username:[email protected]/simple/ my_package

No sé si esta característica está documentada o no.

Lo miraré tan pronto como.

Saludos, Stephane


Original Comment By: Stéphane Klein

Jannis, lo intenté como dijiste, pero no me funcionó cuando usé HTTPS.

¿Alguien me lo puede confirmar? ¿Es un error conocido?

¡Gracias! :-)


Original Comment By: Guilherme Gondim

Puedo confirmar que no funciona con https. Obtuve el siguiente error:

Traceback (most recent call last):

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

paquetes / pip-0.6.3-py2.6.egg / pip / basecommand.py ", línea 115, en main

    self.run(options, args)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

packages / pip-0.6.3-py2.6.egg / pip / commands / install.py ", línea 155, en ejecución

    requirement_set.install_files(finder, force_root_egg_info=self.bundle,

paquete = self.bundle)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

paquetes / pip-0.6.3-py2.6.egg / pip / req.py ", línea 823, en install_files

    url = finder.find_requirement(req_to_install, upgrade=self.upgrade)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

paquetes / pip-0.6.3-py2.6.egg / pip / index.py ", línea 55, en find_requirement

    page = self._get_page(main_index_url, req)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

paquetes / pip-0.6.3-py2.6.egg / pip / index.py ", línea 282, en _get_page

    return HTMLPage.get_page(link, req, cache=self.cache)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

paquetes / pip-0.6.3-py2.6.egg / pip / index.py ", línea 363, en 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

Las versiones más nuevas de pip parecen arrojar el siguiente error al usar un nombre de usuario
y contraseña:

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 ", línea 241, en _get_queued_page

    page = self._get_page(location, req)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

paquetes / pip-0.8.1-py2.6.egg / pip / index.py ", línea 326, en _get_page

    return HTMLPage.get_page(link, req, cache=self.cache)

  File "/home/ian/.virtualenvs/test/lib/python2.6/site-

paquetes / pip-0.8.1-py2.6.egg / pip / index.py ", línea 424, en 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 ", línea 486, en _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 ", línea 88, en la llamada

    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 ", línea 107, en 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

El problema ocurre cuando pip intenta hacer una solicitud principal en el archivo de almacenamiento, pero
alcanza un 401. https://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -86

La URL pasada a self.get_response () es un objeto urllib2.Request pero
get_response () intenta llamar a urlsplit () en él. que arroja el error anterior.
Sin embargo, el archivo parece descargarse.


Original Comment By: Ian Lewis

Parece que esto está arreglado, tengo un índice privado bajo HTTPS + autenticación básica y simplemente funciona con --index-url https://user:[email protected] .

¿Alguien puede confirmar esto y cerrar el problema?

Acabo de agregar una solicitud de extracción (https://github.com/pypa/pip/pull/786) vinculada a este tema.

@brutasse puedo confirmar. ¿Cierra esto?

1.5.6 todavía tiene el problema.

¿Podemos confirmar exactamente el tema del que se habla ahora?

Perdón. Funciona para mi. Mi error :-D
El 18 de julio de 2014 a las 5:20 a. M., "Matt Iversen" [email protected] escribió:

¿Podemos confirmar exactamente el tema del que se habla ahora?

-
Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/pypa/pip/issues/51#issuecomment -49406680.

¿Aún es necesario poner el nombre de usuario y la contraseña en la URL?

¿Es compatible con pip==6.0.8 ?

Utilizo un índice PyPI privado y ejecuto una instalación como esta:
pip install <my_package> --cert=<required_for_some_reason> --extra-index-url https://username:[email protected]/simple/ --allow-all-external

y luego funciona, pero solicita el nombre de usuario y la contraseña de forma interactiva. No es un caso cuando este script se ejecutó fuera del shell con CLI.

Confirme si está vinculado al problema discutido aquí o sugiera si debería crear otro problema, o señale la solución.

@vladignatyev Acabo de encontrarme con el mismo problema que mencionaste, de pedir usuario / contraseña de forma interactiva. Reduje el problema a tener un símbolo en la contraseña que necesita codificación de URL. Si no codifico la contraseña en URL, no se puede analizar la URL. Si codifico la contraseña con url, creo que pip no la está decodificando antes de intentar la autenticación.

También tengo este problema con pip 7.1.2. Hay un símbolo en la contraseña que necesita codificación de URL, pip no se autentica (obtiene una respuesta 401) y solicita el nombre de usuario / contraseña de forma interactiva. Entonces funciona bien si entro al usuario / paso de forma interactiva. Al igual que @bcbrown , sospecho que no está decodificando la contraseña por URL.

POR FAVOR, SOLICITE ESTO LO ANTES POSIBLE PIP 8.1.2

Me encontré con esto usando 9.0.3 .... ¿Esto sigue siendo un problema en serio?

Analizar el nombre de usuario / contraseña de la URL solo funciona cuando se especifica el puerto.
(Al menos en Debian 9, Python 2.7.13, pip 18.1, pero también tuve este problema en otros sistemas)

Esta consulta por nombre de usuario / contraseña: pip install -f https://user:[email protected]/pkgs requests
Esto funciona: pip install -f https://user:[email protected]:443/pkgs requests

Esto funciona con pip 18.1 pero está roto en la última versión (19.1). Confirmado después de volver a 18.1, funciona.

Analizar el nombre de usuario / contraseña de la URL solo funciona cuando se especifica el puerto.
(Al menos en Debian 9, Python 2.7.13, pip 18.1, pero también tuve este problema en otros sistemas)

Esta consulta por nombre de usuario / contraseña: pip install -f https://user:[email protected]/pkgs requests
Esto funciona: pip install -f https://user:[email protected]:443/pkgs requests

@olt Tuve el mismo problema al usar pip 19.1.1 y logré que funcionara colocando el puerto como sugieres. Solución bastante oscura, me gustaría poder votar más tu respuesta.

¿Fue útil esta página
0 / 5 - 0 calificaciones