やあ、
「.htaccess」ファイルでプライベートPythonインデックスリポジトリを保護したいのですが。
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
http:// username:password @ server / whatever /のようなURLを使用するだけ
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がアーカイブファイルに対してheadリクエストを実行しようとしたときに発生しますが、
401にヒットします。https: //bitbucket.org/ianb/pip/src/tip/pip/download.py#cl -86
self.get_response()に渡されるURLは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
2014年7月18日午前5時20分、「MattIversen」 [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
その後、機能しますが、ユーザー名とパスワードをインタラクティブに要求します。 このスクリプトがCLIを使用してシェルの外部で実行された場合はそうではありません。
ここで説明されている問題にリンクされているかどうかを確認するか、別の問題を作成する必要があるかどうかを提案するか、解決策を指摘してください。
@vladignatyev私はあなたが言及したのと同じ問題に遭遇しました。それは、ユーザー/パスワードをインタラクティブに要求することです。 問題を、パスワードにurlエンコードが必要な記号を含めるように絞り込みました。 パスワードをURLエンコードしないと、URLを解析できません。 パスワードをURLエンコードする場合、認証を試みる前にpipがパスワードをURLデコードしていないと思います。
私はpip7.1.2でもこの問題を抱えています。 パスワードにurlエンコードが必要な記号があり、pipは認証に失敗し(401応答を取得)、ユーザー名/パスワードの入力をインタラクティブに要求します。 その後、ユーザー/パスをインタラクティブに入力すると、正常に機能します。 @bcbrownのように、パスワードをURLデコードしていないのではないかと
このできるだけ早くPIP8.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
これはpip18.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
http:// username:password @ server / whatever /のようなURLを使用するだけ