Python の pip をプロキシ経由回線で使えないときに試した2つの方法(2023年版)

2021年7月24日

自宅のパソコンで pip コマンドを使う時はこんなこと気にする必要ないのですが、
会社のパソコンで pip コマンドを使うと、プロキシ経由回線の影響か、オンラインでのインストールに失敗してしまいます。

どうしてもパッケージのインストールが必要な場合は、何としてでもこの問題を解決しなければなりません。
私はなんとかインストールできている状況なので、情報共有します。

前提とする環境

前提として、自分が試した環境は次の環境です。そのほかの環境でもおそらく大丈夫だと思います。

  • OS:Windows 10 (22H2)
  • Python:3.11.4 (64 bit)
  • Proxy:http://IPアドレス:ポート番号

復習:pip コマンドのオプション

pip コマンドのオプションは多数ありますが、私が主に使うのは次の通りです。

  • pip list
    • インストールされているパッケージ一覧
  • pip list -o
    • インストールされているパッケージのうち最新版より古いもの
  • pip install (パッケージ名)
    • パッケージをダウンロードして新規インストール
  • pip install -U (パッケージ名)
    • パッケージをダウンロードして最新版にバージョンアップ
  • python -m pip install -U pip
    • pip 自体をアップグレードする場合は pip コマンドではなく python コマンドを使う。
  • pip download (パッケージ名)
    • パッケージのファイルをダウンロード(インストールはしない)

オプション

  • –no-deps
    • オフラインインストールするとき使う。依存パッケージをインストールせず対象のパッケージだけインストールする。
  • –trusted-host
    • SSL 認証のエラーが出るときに使う。対象のホスト名を信頼できるものとして SSL 認証をスキップする。

まず一覧が取得できるか確認する

現在の自分のネットワーク環境で pip が使えるかを確認してください。確認方法は、pip list -o コマンドを実行して、アップデートする必要のあるパッケージの一覧をインターネットから取得できるかどうかを確認すればよいです。このコマンドでは、パッケージの最新版のバージョンをインターネットから取得して、現在インストールされているバージョンと比較します。そのため、プロキシ経由回線で適切に設定していないと、このコマンドの実行時にエラーが出る場合があります。

このコマンドを実行してエラーが発生しなかった場合は、問題ありません。

エラーが発生した場合は、プロキシの設定が必要になります。(※ネットワークに不具合がある場合もエラーは発生しますが、この記事ではインターネットには繋がっている前提で説明しています。)

Python 用プロキシ設定

プロキシ経由回線で Python の pip 機能を使えるようにするには、次の2つの設定を行います。

  1. 環境変数にプロキシの設定をする。
  2. pip.ini を作成し、コマンド入力を簡素化する。

設定1:環境変数にプロキシの設定をする

Python 用に、次の2つの環境変数を設定します。

環境変数名
HTTP_PROXY http://IPアドレス:ポート番号
HTTPS_PROXY http://IPアドレス:ポート番号

会社の PC の設定を変更してよい場合は、次のようにして環境変数を登録します。スタートを右クリックし、「システム」を開き、「システムの詳細設定」→「環境変数(N)…」と進みます。

Python 用プロキシ設定環境変数

もし、会社の PC の設定を変更してはいけない場合は、上記の設定をしなくてもできる方法はあります。コマンド実行前に、毎回 set コマンドで環境変数を設定すればよいです。コマンドプロンプト起動中はこの環境変数が維持されますが、コマンドプロンプト終了後はここで設定した環境変数はなかったことになるので、安心してください。

set HTTP_PROXY=http://IPアドレス:ポート番号
set HTTPS_PROXY=http://IPアドレス:ポート番号

設定2:pip.ini を作成する

pip.ini を作成し、コマンド入力を簡素化します。pip.ini の絶対パスは「%APPDATA%\pip\pip.ini」(C:\Users\(ユーザー名)\AppData\Roaming\pip\pip.ini)です。pip.ini は手動で作成するものですので、今まで作っていなければ手動で新規に作成する必要があります。

pip.ini を新規作成する場合は、次のようにして作成します。

  1. エクスプローラーのアドレスバーに「%APPDATA%」と入力して Enter キーを押す。(%APPDATA% は C:\Users\(ユーザー名)\AppData\Roaming のエイリアスです。)
  2. 「pip」フォルダを作成する。
  3. そのフォルダの中に「pip.ini」を作成する。

これにより、pip.ini が絶対パス C:\Users\(ユーザー名)\AppData\Roaming\pip.ini に出来上がります。

次に、pip.ini を編集します。テキストエディタで pip.ini を開き、次のように記載してください。

[global]
trusted-host = pypi.python.org
               pypi.org
               files.pythonhosted.org
proxy = http://アドレス:8080
default-timeout=100

この状態で、pip list -o コマンドをやって、エラーが出なければ成功です。あとは、pip install コマンドなどが使えるようになっているはずです。

オンラインインストールができない場合

どうしてもオンラインでインストールできない場合、次の2通りの方法を試してみてください。

方法1:コマンドのオプションで頑張る

この方法でうまくいけば一番楽です。うまくいかない場合は方法2を試してください。

結論から言うと、次のコマンドを実行すればいいです。

プロキシの環境変数設定(必要であれば)

set HTTP_PROXY=http://IPアドレス:ポート番号
set HTTPS_PROXY=http://IPアドレス:ポート番号

新規インストール

python install パッケージ名 --trusted-host pypi.python.org --trusted-host pypi.org --trusted-host files.pythonhosted.org

アップデート

python install -U パッケージ名 --trusted-host pypi.python.org --trusted-host pypi.org --trusted-host files.pythonhosted.org

方法2:ブラウザでダウンロードしてオフラインインストールする

このサイトを見れているということは、ブラウザでインターネットを閲覧することはできているはずです。ですので、ブラウザ上でパッケージのファイルをダウンロードすることができるはずです。

なので、パッケージのダウンロードはブラウザで行って、そのパッケージファイルをオフラインでインストールすれば、間違いなくプロキシ経由回線の影響を受けずにパッケージをインストールできます。

パッケージは次のサイトで検索できます。

PyPI · The Python Package Index (https://pypi.org)

上記のサイトを使わなくても、pip install コマンドのエラーメッセージから URL がわかる場合もあります。まず、pip install コマンドを実行したときのエラーメッセージを見てください。

C:\Users\username>pip install numpy
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)'))': /simple/numpy/
Could not fetch URL https://pypi.org/simple/numpy/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries exceeded with url: /packages/bf/03/bb8a4c7b5a69795e61a21459d1ff1c0730ef0faa1f3dfff525b7c4132347/numpy-1.21.1-cp39-cp39-win_amd64.whl (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)'))) - skipping
ERROR: Could not find a version that satisfies the requirement numpy (from versions: none)
ERROR: No matching distribution found for numpy

この中に、パッケージファイルの URL がわかる情報があります。1つ目が host=’…’ と書かれているところ。2つ目が url: /packages/… と書かれているところ。この2つから、パッケージファイルの URL が特定できます。https://(ここにホスト名)(ここにURL) という感じです。上記のエラーメッセージの場合だと、https://files.pythonhosted.org/packages/bf/03/bb8a4c7b5a69795e61a21459d1ff1c0730ef0faa1f3dfff525b7c4132347/numpy-1.21.1-cp39-cp39-win_amd64.whl になります。

この URL を Web ブラウザのアドレスバーに貼り付けて Enter キーを押すと、ブラウザ上でパッケージファイルをダウンロードできます。

ダウンロードしたパッケージファイルがあるフォルダでコマンドプロンプトを開きます。簡単な方法として、エクスプローラーのアドレスバーに「cmd」と入れて Enter を押せばいいです。そこで、次のコマンドを実行します。

新規インストールの場合

pip install パッケージファイル名 --no-deps

アップデートの場合

pip install -U パッケージファイル名 --no-deps

ここで、–no-deps オプションは、依存するパッケージをインストールしないための設定です。これをしないと、そのパッケージのインストールに必要な他のパッケージをインターネット上からダウンロードしようとするため、オフラインインストールに失敗します。

上記の方法では、対象のパッケージは間違いなくオフラインインストールできます。ですが、依存する他のパッケージのインストールはしていないです。インストールしたパッケージを import したときにエラーが出た場合は、そのエラーに出たパッケージも同様の手順でインストールしていけばいいです。

結論

会社のネットワーク環境がプロキシ経由回線だったりして pip がうまくいかないときも、頑張ればインストールできることがわかりました。

ITPython

Posted by rexpit