Pythonプログラミング通信講座では、ExcelやPDFのファイルを扱うのに、PyPIで公開されている外部ライブラリを使用します。インストールは、Pythonに同梱されているpipというツールを用います。

例えば、Excelファイルを読み書きできるライブラリ「openpyxl」をインストールする場合には、以下のようにコマンドプロンプトでpip installを実行すれば、通常は問題なくインストールできます。

C:¥Users¥Taro> py -m pip install openpyxl

しかし、エラーになりインストールできないことがあります。よくある原因は以下の2つです。

  • 原因1:インターネット接続が制限されている
  • 原因2:ファイル書込みの権限がない

原因1の多くが、社内のプロキシサーバーによるものです。つまり、自分のPCと外部サーバー(ここではPyPI)の間の通信が、社内のプロキシサーバーにより制限されているケースです。この問題を解決するには、以下の2つの方法があります。

  • 方法1:プロキシサーバーを通過できるようにする
  • 方法2:他の環境でダウンロードしたファイルでインストールする

原因2によるエラーは、Python本体をC:¥Program Files (x86)等にインストールした場合に発生します。pip installではPython本体の場所にあるLib/site-packagesディレクトリにライブラリをインストールします。そのため、C:¥Program Files (x86)内のように管理者権限がないとファイルの書き込みができない場所Python本体があるとエラーが発生します。この問題を解決するには、以下の2つの方法があります。

  • 方法3:管理者権限でコマンドプロンプトを起動する
  • 方法4--userオプションをつけて、pip installを実行する

通常は管理者権限がなくてもpip installできます

Python本体のインストール場所は、デフォルトでは自分のユーザーディレクトリ内なので、管理者権限がなくてもpip installできます。Pytyon本体のインストール時に、「Customize installation」の方を選択し、「Install for all users」をチェックすると、C:¥Program Files (x86)にインストールされるので、管理者権限がないとpip installを実行した時にエラーが発生します。

以下に各方法について説明します。

原因1の解決方法

インターネットに接続しているのに、接続リトライ(通常5回)が実行されて、最終的に以下のようなエラーが表示される場合は、次の方法1または方法2で解決する可能性があります。

Collecting openpyxl
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by ~
(中略)
ERROR: Could not find a version that satisfies the requirement openpyxl (from versions: none)
ERROR: No matching distribution found for openpyxl

方法1:プロキシサーバーを通過できるようにする

ここで必要となる情報は、プロキシサーバーの「URL(ホスト)」と「ポート番号」です。さらに、認証プロキシの場合は「ユーザー名」と「パスワード」が必要です。社内のシステム管理者に問い合わせるか、もしかしたら社内マニュアルに記載されている場合もあると思います。

以下のようにコマンドプロンプトset HTTPS_PROXY=~によりプロキシの情報を環境変数にセットしてから、pip installを実行します。

# プロキシサーバーのURLが 「http://web-proxy.mycompany.co.jp」、ポート番号が 「8080」 の場合

C:¥Users¥Taro> set HTTPS_PROXY=http://web-proxy.mycompany.co.jp:8080/
C:¥Users¥Taro> py -m pip install openpyxl

認証が必要なプロキシサーバーの場合は、以下のように@を挟んで「ユーザー名:パスワード」を指定します。

# ユーザー名が 「yamada.taro」、パスワードが 「12345」 の場合

C:¥Users¥Taro> set HTTPS_PROXY=http://yamada.taro:12345@web-proxy.mycompany.co.jp:8080/
C:¥Users¥Taro> py -m pip install openpyxl

方法2:ダウンロードしたファイルでインストールする

上記の方法でプロキシを通過できれば一番簡単ですが、社内の事情やどうしても通過できない場合には、少し面倒ですが以下の手順でローカルファイルからインストールします。つまり、プロキシがない他の環境で、ライブラリのファイルをダウンロードしておき、そのファイルからインストールします。操作は以下の手順1 ▶ 手順2 の順に行います。

(手順1)インストール用のファイルを「ダウンロード」

まず、他の通信環境(プロキシなし)で、以下のpip downloadコマンドで必要なファイルをダウンロードしておきます。

# ライブラリ 「openpyxl」 のファイルを 「openpyxl_srcディレクトリ」 にダウンロード

C:¥Users¥Taro> cd Documents
C:¥Users¥Taro>Documents> py -m pip download -d openpyxl_src openpyxl

このコマンドを実行すると、ドキュメントのなかに「openpyxl_srcディレクトリ」が作成され、そのなかにインストールに必要なファイルがダウンロードされます。

(手順2)ダウンロードしたファイルを用いて「インストール」

次に、ダウンロードしたファイルを用いてインストールします。「openpyxl_srcディレクトリ」をUSBメモリなどにコピーして、インストールするパソコンのドキュメントフォルダに移してください。

以下のようにコマンドプロンプトで、カレントディレクトリをドキュメントフォルダに移動し、pip installでインストールを実行します。

# 「openpyxl_srcディレクトリ」 にあるファイルを用いて 「openpyxl」 をインストール

C:¥Users¥Taro> cd Documents
C:¥Users¥Taro>Documents> py -m pip install --no-index --find-links=openpyxl_src openpyxl

このように、--no-index --find-links=openpyxl_srcを指定すると、通常の参照先(PyPI)を検索しないで、ローカルにある「openpyxl_srcディレクトリ」の中身だけでインストールを実行します。

原因2の解決方法

pip installを実行すると以下のように「アクセスが拒否されました。」とエラーに表示される場合は、次の方法3または方法4で解決する可能性があります。

Installing collected packages: openpyxl
ERROR: Could not install packages due to an EnvironmentError: [WinError 5] アクセスが拒否されました。: 'C:\\Program Files (x86)\\Python37-32\\Lib\\site-packages\\openpyxl'
Consider using the `--user` option or check the permissions.

方法3:管理者権限でコマンドプロンプトを起動する

以下のどちらかの方法で、コマンドプロンプトを管理者権限で起動して、そこでpip installを実行します。

  1. + X でメニューが表示されたら、A(「コマンドプロンプト(管理者)」)。
  2. でスタートメニューが表示されたら、cmdを入力。「コマンドプロンプト」を右クリックしてメニューから「管理者として実行」を選択。

なるべく「方法4」でインストールしてください

「方法3」では、pip installを実行する度に、C:¥Program Files (x86)内にファイルを書き込むことになるので、セキュリティ上おすすめしません。なるべく、次の「方法4」の採用を検討してください。

方法4--userオプションをつけて、pip installを実行する

以下のように、--userオプションを付けてpip installを実行すると、ユーザーディレクトリ内にライブラリがインストールされます。ユーザーディレクトリ内であれば、管理者権限は不要で書き込みできるのでエラーは生じません。

C:¥Users¥Taro> py -m pip install openpyxl --user
インストール先を確認する方法

--userオプションを付けた場合のライブラリのインストール先は、以下のコードで確認できます。このように、Python本体の場所(Program Filesディレクトリ)ではなく、ユーザーディレクトリ内にインストールされます。

>>> import site
>>> site.getusersitepackages()
'C:¥¥Users¥¥Taro¥¥AppData¥¥Roaming¥¥Python¥¥Python37¥¥site-packages'

なお、Python本体の場所は、以下のコードで確認できます。

>>> import sys
>>> sys.executable
'C:¥¥Program Files (x86)¥¥Python37-32¥¥python.exe'

# デフォルトのインストールをした場合は以下の場所
>>> sys.executable
'C:¥¥Users¥¥Taro¥¥AppData¥¥Local¥¥Programs¥¥Python¥¥Python37-32¥¥python.exe'

その他

複数のバージョンのPythonをインストールしている場合は、以下の-3.6のようにインストールしたいバージョンを指定してください。何も指定しないと通常は新しいバージョンの方にインストールされます。

# 例えば、「3.6」 と 「3.7」 が共存するパソコンで、「3.6」 の方にインストールする場合

C:¥Users¥Taro>Documents> py -3.6 -m pip install --no-index --find-links=openpyxl_src openpyxl

なお、ライブラリのインストール用ファイルをダウンロードする場合も同様です。

# 3.6用にライブラリのファイルをダウンロードする場合

C:¥Users¥Taro>Documents> py -3.6 -m pip download -d openpyxl_src openpyxl

上記の他に、初めからライブラリも一緒にインストールされるAnacondaの使用も考えられますが、本講座では使用しません。