Привет,
Я хочу защитить частный репозиторий 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 не поддерживает эту функцию? Если не запланировано?
С уважением,
Стефан
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, и мне удалось заставить ее работать, поместив порт, как вы предложили. Довольно непонятный обходной путь, я хотел бы больше проголосовать за ваш ответ.
Самый полезный комментарий
pip поддерживает базовую аутентификацию через свой URLOpener,
http://bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -67
Просто используйте URL-адрес, например http: // имя пользователя: пароль @ сервер / что угодно /