Pip: Использовать pip install через частный репозиторий, защищенный .htaccess?

Созданный на 15 мар. 2011  ·  21Комментарии  ·  Источник: pypa/pip

Привет,

Я хочу защитить частный репозиторий Python Index с помощью файла ".htaccess".

Когда я использую 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 не поддерживает эту функцию? Если не запланировано?

С уважением,
Стефан


auto-locked enhancement

Самый полезный комментарий

pip поддерживает базовую аутентификацию через свой URLOpener,
http://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -67

Просто используйте URL-адрес, например http: // имя пользователя: пароль @ сервер / что угодно /


Original Comment By: Jannis Leidel

Все 21 Комментарий

pip поддерживает базовую аутентификацию через свой URLOpener,
http://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -67

Просто используйте URL-адрес, например http: // имя пользователя: пароль @ сервер / что угодно /


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

Яннис, я пробовал, как вы сказали, но при использовании HTTPS у меня не получилось.

Может кто-нибудь подтвердить это для меня? Это известная ошибка?

Спасибо! :-)


Original Comment By: Guilherme Gondim

Я могу подтвердить, что он не работает с https. Я получаю следующую ошибку:

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 ", строка 115, в основном

    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 ", строка 155, выполняется

    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 ", строка 823, в 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 ", строка 55, в 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 ", строка 282, в _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 ", строка 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-

packages / 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-

packages / 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-

packages / 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-

packages / 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-

packages / 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-

packages / 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 пытается выполнить головной запрос к архивному файлу, но
достигает 401. https://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -86

URL-адрес, переданный в self.get_response (), является объектом 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
18 июля 2014 г. в 5:20 «Мэтт Иверсен» [email protected] написал:

Можем ли мы точно подтвердить, о чем идет речь?

-
Ответьте на это письмо напрямую или просмотрите его на 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

а затем он работает, но запрашивает имя пользователя и пароль в интерактивном режиме. Это не тот случай, когда этот сценарий выполнялся вне оболочки с помощью интерфейса командной строки.

Пожалуйста, подтвердите, связана ли она с обсуждаемой здесь проблемой, или предложите мне создать другую проблему, или укажите решение.

@vladignatyev Я только что столкнулся с той же проблемой, о которой вы упомянули, с интерактивным запросом пользователя / пароля. Я сузил проблему до наличия символа в пароле, который требует кодирования URL. Если я не закодирую пароль, URL-адрес не будет проанализирован. Если я кодирую пароль по URL-адресу, я думаю, что pip не декодирует его по URL-адресу перед попыткой аутентификации.

У меня тоже есть эта проблема с pip 7.1.2. В пароле есть символ, который требует кодирования URL, pip не может аутентифицироваться (получает ответ 401) и запрашивает имя пользователя / пароль в интерактивном режиме. Затем он отлично работает, если я ввожу пользователя / пароль в интерактивном режиме. Как и @bcbrown, я подозреваю, что это не расшифровка пароля по URL-адресу.

ПОЖАЛУЙСТА, ИСПРАВИТЕ ЭТО КАК МОЖНО СКОРЕЕ 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, и мне удалось заставить ее работать, поместив порт, как вы предложили. Довольно непонятный обходной путь, я хотел бы больше проголосовать за ваш ответ.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги