認証プロキシの背後にあるWindowsでPIPを使用する方法


90

私のコンピューターはWindowsサーバーのプロキシの背後で(Active Directoryを使用して)Windowsを実行しており、それをpip(python3で)実行する方法がわかりません。を使用してみました--proxyが、それでもタイムアウトします。私も長いタイムアウト(60秒)を設定しようとしましたが、違いはありませんでした。私のプロキシ設定は正しいので、TortoiseHGで正常に使用しているものと比較して確認しました。

私が試すことができることを誰かが知っている他のトリックはありますか、またはpipWindowsプロキシに関していくつかの制限がありますか?

更新:私の失敗した試みには、pypiの検索が含まれていました。実際に何かをインストールしてみましたが、うまくいきました。それでも検索は失敗します。これはバグを示していますか、pipそれとも動作が異なりますか?

回答:


107

私は2つのオプションを試しましたが、どちらも会社のNTLM認証プロキシで機能します。オプション1を使用する--proxy http://user:pass@proxyAddress:proxyPort

それでも問題が解決しない場合は、プロキシ認証サービスをインストールし(私はCNTLMを使用しています)、pipをポイントすることをお勧めします。--proxy http://localhost:3128


1
CNTLMツールは積極的にメンテナンスされており、非常にうまく機能しているようです。
のMichałフィッタ

6
私がやったすべての仮説に関係なく、それを機能させることはできませんでした
eusoubrasileiro

2
パスワードまたはユーザー名に特殊文字が含まれている場合は、特殊文字の前に\を付けてエスケープします。正常に動作します。
Arockia 2017年

これを正しく理解するには、pipにリクエストをプロキシに送信し、http接続を介して指定されたユーザーとパスワードで自身を認証するように指示しているのですか?つまり、パスワードは暗号化されずにプロキシサーバーに送信されます。セキュリティ上のリスクが大きいようですが、何か不足していますか?
ロバート

これは、Microsoft先頭ファイアウォールと私のために働いた
ラウル・サリナス- Monteagudo

64

これを理解するには数時間かかりましたが、ついにCNTLMを使用して動作させ、その後、pip構成ファイルだけで動作させました。これが、pip構成ファイルで機能する方法です...

解決:

1. Windowsでユーザープロファイルディレクトリ(例:C:\ Users \ Sync)に移動し、「pip」という名前のフォルダーを作成します

2.このディレクトリ(例:C:\ Users \ Sync \ pip \ pip.ini)に「pip.ini」という名前のファイルを作成し、次のように入力します。

    [global]
    trusted-host = pypi.python.org
                   pypi.org
                   files.pythonhosted.org
    proxy = http://[domain name]%5C[username]:[password]@[proxy address]:[proxy port]

[ドメイン名][ユーザー名][パスワード][プロキシアドレス]、および[プロキシポート]を独自の情報に置き換えます。

注意、もしあなたの [ドメイン名][ユーザー名]または[パスワード]は特殊文字を持っている、あなたが持っているパーセントエンコード | それらをエンコードします。

3.この時点で、「pip install」を問題なく実行できました。

うまくいけば、これは他の人にもうまくいきます!

PS:パスワードをプレーンテキストで保存するため、セキュリティ上の問題が発生する可能性があります。これが問題である場合は、この記事を使用してCNTLMを設定することを検討してください(プレーンテキストの代わりにハッシュされたパスワードを使用できます)。その後proxy = 127.0.0.1:3128、上記の「pip.ini」ファイルに設定します。


2
pip.iniの場所の詳細については、こちらをご覧くださいPIP_CONFIG_FILE環境変数を設定して、pip.iniファイルを指すようにすることができます
Mahesha999

1
大好きです!!!!とてもきれいです-ほとんどのプロキシでは手動でパスワードを入力できることに注意してください。パスワードは平文のままにしないでください。
avgvstvs 2018年

1
ここで追加できる別の非常に重要なグローバル設定はミラーサイトです。たとえば、「index-url = pypi.tuna.tsinghua.edu.cn/simple」を追加すると、中国のPIPのダウンロード速度が大幅に向上します。Linuxでの対応するファイルは〜/ .pip / pip.confです
TingQian LI

4
[ドメイン名]とは
Alex B

1
@AlexB、[ドメイン名]はWindowsドメイン名を指します
マイクペニントン

45

これは私がそれを設定する方法です:

  1. 管理者としてコマンドプロンプト(CMD)を開きます。
  2. プロキシ設定をエクスポートします。

    set http_proxy=http://username:password@proxyAddress:port

    set https_proxy=https://username:password@proxyAddress:port

  3. インストールするパッケージをインストールします。

    pip install PackageName

例えば:

例


4
これは間違いなく最初に試すことです。Pythonはクロスプラットフォームであり、これはLinuxで通常行うことと同等です。Windows(同じプロキシの背後にある)で問題があり、--proxy引数にはまったく問題がありませんでしたが、標準のenv varアプローチが初めて機能しました。念のため、no_proxy他の内部リクエストがプロキシ経由で出ようとしないように設定しました。
randomsock

win10では私には機能しません。cygwinまたはcmderなどのエミュレータコンソールツールを使用して、Linuxの方法で実行します。export http_proxy=<proxy>そしてexport https_proxy=<proxy>、実行しますpip install <package>
bucky

これは私にとってはうまくいきましたが、--proxyコマンドラインフラグはうまくいきませんでした。Windows 10.
AmbroseChapel

15

私はWindows 7で同じ問題に遭遇しました。「pip.ini」ファイルを中に含む「pip」フォルダーを作成することで、なんとか機能させることができました。このドキュメントを「C:\ Users \ {my.username} \ AppData \ Roaming」に配置しました。Pythonのドキュメントによると、

Windowsでは、構成ファイルは%APPDATA%\ pip \ pip.iniです。

pip.iniファイルには、次のものしかありません。

[global]
proxy = [proxy address]:[proxy port]

したがって、ユーザー名:パスワードはありません。そして、それはうまく機能しています。


1
私の場合、これは、このファイルにユーザー名とパスワードをクリアテキストで入力した場合にのみ機能します...:// "ping XYZ"のようにCMDから他のすべての機能が機能するのはなぜですか。IE設定を使用してPIPを実行しないのはなぜですか?
hmrc87 2017年

7

同様の問題があり、会社でNTLMプロキシ認証を使用していることがわかりました。pip.logにこのエラーが表示された場合、これはおそらく問題です。

URL http://pypi.python.org/simple/pyreadlineを取得できませんでした:HTTPエラー407:プロキシ認証が必要です(ISAサーバーは、要求を満たすために承認が必要です。Webプロキシフィルターへのアクセスが拒否されました。)

NTLMapsは、中間プロキシになることにより、NTLMプロキシサーバーとのインターフェースに使用できます。

NTLMAPをダウンロードし、含まれているserver.cfgを更新し、main.pyファイルを実行して、pipのプロキシ設定を127.0.0.1にポイントします。

また、server.cfgファイル内のこれらのデフォルト値を次のように変更する必要があります。

LM_PART:1
NT_PART:1

# Highly experimental option. See research.txt for details.
# LM - 06820000
# NT - 05820000
# LM + NT - 
NTLM_FLAGS: 07820000

http://ntlmaps.sourceforge.net/


1

プロキシからの証明書で問題が発生する場合もあります。プロキシの証明書を取得する方法については、ここにたくさんの答えがあります。

Windowsホストでは、pipがプロキシをクリアできるようにするために、次のような環境変数を設定できます。

PIP_CERT=C:\path\to\certificate\file\in\pem\form\myproxycert.pem

--cert引数を使用してもPIP同じ結果が得られます。


1

リモートのWindows環境でも同じ問題が発生しました。ここや他の類似の投稿で見つかった多くの解決策を試しましたが、何もうまくいきませんでした。最後に、解決策は非常に簡単でした。私はNO_PROXYcmdで設定する必要がありました:

set NO_PROXY="<domain>\<username>:<password>@<host>:<port>"
pip install <packagename>

二重引用符を使用し、NO_PROXY大文字に設定する必要があります。NO_PROXYコンソールを使用するたびに設定する代わりに、環境変数として追加することもできます。

ここに掲載されている他の解決策が機能する場合に役立つことを願っています。


1

インストールcntlm: Cntlm:Cでの高速NTLM認証プロキシ

構成cntlm.ini:

ユーザー名ob66759

ドメインNAM

パスワードシークレット

プロキシproxy1.net:8080

プロキシproxy2.net:8080

NoProxy localhost、127.0.0。*、10。*、192.168。*

聞く3128

127.0.0.1を許可

#your IP

10.106.18.138を許可

始めよう:

cntlm -v -c cntlm.ini

cmd.exeで:

pip install --upgrade pip --proxy 127.0.0.1:3128

Collecting pip
  Downloading https://files.pythonhosted.
44c8a6e917c1820365cbebcb6a8974d1cd045ab4/

    100% |███████████████████████████████
Installing collected packages: pip
  Found existing installation: pip 9.0.1
    Uninstalling pip-9.0.1:
      Successfully uninstalled pip-9.0.1

Successfully installed pip-10.0.1

動作します!

パスワードを非表示にすることもできます:https : //stormpoopersmith.com/2012/03/20/using-applications-behind-a-corporate-proxy/


1

Windows10以降のソリューションで同じ問題が機能しません。

のようなエミュレータコンソールツールを使用cygwinし、デフォルトのLinuxの方法で実行します。

export http_proxy=<proxy>
export https_proxy=<proxy>
pip install <package>

物事はうまく機能しています。


Windows 10で認証プロキシを使用すると、これが機能します。中間プロキシとしてcntlmを使用し、msdosプロンプトで「set https_proxy = localhost:3128」、次に「pip install -U setuptools == 41.0.1」
mrtexaz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.