背景
Pythonで開発をしていたところ、pandasライブラリが必要になったので、コマンドプロンプトにてpip install pandas
を実行しました。すると、以下のようなエラーを吐きました。
$> pip install pandas
WARNING: REtrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'ProxyError('Cannot connect to proxy.', error('Tunnel connection failed: 407 Proxy Authentication Required',))': /simple/pip/
WARNING: REtrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'ProxyError('Cannot connect to proxy.', error('Tunnel connection failed: 407 Proxy Authentication Required',))': /simple/pip/
WARNING: REtrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'ProxyError('Cannot connect to proxy.', error('Tunnel connection failed: 407 Proxy Authentication Required',))': /simple/pip/
WARNING: REtrying (Retry(total=1, connect=None, read=None, redirect=None)) after connection broken by 'ProxyError('Cannot connect to proxy.', error('Tunnel connection failed: 407 Proxy Authentication Required',))': /simple/pip/
WARNING: REtrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'ProxyError('Cannot connect to proxy.', error('Tunnel connection failed: 407 Proxy Authentication Required',))': /simple/pip/
ERROR: Could not find a version that satisfies the requirement pandas (from versions: none)
ERROR: No matching distribution found for pandas
pip install
はインターネット(PyPI)から自動でライブラリを取ってきてインストールしてくれるコマンドです。
インターネットからファイルを持ってこようとしたときに、コマンドの実行がプロキシに阻まれてしまったようです。
会社のプロキシサーバーからインターネットに接続している環境では稀によくあるケースのようで、プロキシをset HTTPS_PROXY = http://ProxyServerIP:Port
などで設定できれば直で解決できるようですが、今回はプロキシを通すアプローチはできませんでした。
そこで私はPyPIからライブラリのインストール用ファイルをダウンロードしにいって、ローカルでインストールする手法を取りました(本題)。
結論
お急ぎの方のために解決法を先に記述しておきます。
- PyPIから必要なライブラリのソースファイル(Source Distribution)とビルト済みファイル(Built Distribution)をダウンロードする
- ダウンロードしたディレクトリの1つ上の階層で以下を実行する
py -m pip install --no-index --find-links=package-name package-name
手順
PyPIからライブラリのディストリビューションをダウンロードし、ローカルでインストールする手法について具体的な手順を記述します。
今回はpandasをインストールするという想定で記述していきます。
今回の環境は以下の通りです。
# | バージョン |
---|---|
OS | Windows 10 64bit |
Python | 3.10.3 |
pip | 22.0.4 |
setuptools | 68.1.2 |
1.PyPIにpandasのディストリビューションを拾いに行く
PyPI(Python Package Index)とは、Pythonのライブラリがたくさん置いてあるリポジトリです。
ふだんpip download
やpip install
を実行するとき、pip
はこのDBを参照しに行っています。
見に行ってもらったらわかりますが、PyPIではかんたんに手動でディストリビューションをダウンロードすることができます。
今回はpandasが目標なので、検索欄にpandasと入力していきます。
検索結果から、バージョン番号などをよく見て必要なものを選びます。
今回は2023/06/29にリリースされているpandas 2.0.3を選択しました。
注※Pythonのバージョンごとに使えるライブラリのバージョンが異なってくるので確認が必要
pandas 2.0.3を開くと、pandasのかわいいロゴとともにプロジェクトの説明が現れます。
画面左のナビゲーション欄から、ファイルのダウンロードに進むことができます。
ここで知っておきたいのが、必要なディストリビューションについて。
Pythonのライブラリをインストールするには、ソースファイルとビルト済みファイルが必要です。これらについての詳しい説明は本記事では割愛します。
PyPI上ではだいたい以下の形式で落ちてます。
- ソースファイル : tar.gzファイル
- ビルト済みファイル : whlファイル
whlファイルの選び方
pandas 2.0.3もそうですが、whlファイルが複数置いてある場合があります。
どれを選べばいいの?となったので、補足説明として選び方を書いておきます。
まずpandas 2.0.3の場合ではcp311
とかcp39
というのが見えると思います。
この数字はそれぞれPythonのバージョンを表しており、cp311ならPython 3.11.*、cp39ならPython 3.9.*を意味します。
つまり、自分のPythonバージョンに合致するwhlファイルを選べばいいわけです。
win_amd64
とかmacos_11_0_arm64
とかは説明するまでもないと思うので割愛します。
ちなみに、Built Distributionが1つしかない場合があります。
これもファイル名を見ると*-py2.py3-none-any.whl
となっていて、Python2とかPython3ならどれも対応してるよ!とわかります。すごいですね。
自分のPythonのバージョンに合致するwhlファイルがない場合は、そのライブラリはそのバージョンのPythonに対応していません。Pythonをアップグレードかダウングレードしましょう。
実はPyPIの画面左のメタデータ欄に必須Pythonバージョンが書いてあったりもします。
ここまでで2つのディストリビューションファイルをダウンロードすることができましたが、格納場所にもコツがあります。
以下のことを守って格納してください。
- コマンドプロンプトで実行できるディレクトリであること
- .tar.gzと.whlを格納するフォルダに別のファイルがないこと
2点目は必須ではない(と思います)が、こうしておいたほうがインストールするときに楽です。また本記事ではこのように保存した前提で進めていきます。
Windows11の批判はやめてください
2.ライブラリをインストールする
ディストリビューションファイルを準備できたので、いよいよライブラリをインストールできます。
まずは、コマンドプロンプト(ターミナル)でディストリビューションファイルを置いたディレクトリの1つ上の階層に移動します。
※エクスプローラーのパスの欄にcmd
と入力すると表示しているディレクトリでコマンドプロンプトが開きます。
では、インストールするコマンドを実行していきます。
py -m pip install --no-index --find-links=pandas pandas
解説を入れておきます。
-
py -m
: Pythonのパスが通っていなくても実行できる -
--no-index
: パッケージインデックスを無視する -
--find-links
: 指定されたURLまたはディレクトリから必要ファイルを探す
--no-index
と--find-links
を組み合わせることでオフラインでのインストールを可能にしています。ここで格納方法のコツが活きてくるわけですね。
4.pandasのインストールにあたって発生したトラブルと対応(備忘録)
Successfully installedと表示されればインストール完了です。お疲れ様でした。
今回の私の環境ではここでも失敗がいくつかあったためさらに記述していきます。
まず、上記コマンドを実行したところ、setuptoolsのバージョンが足りないよ!と言われました。
Python3.10.3のデフォルトではsetuptoolsのバージョンは58.1.0ですが、pandasをインストールするためにはsetuptools 61.0.0異常が必要との旨のエラーが発生しました。
そこで、pip install -U setuptools
を……というわけには当然いかず、setuptoolsもPyPIから落としてきてインストールしました。
上記手順と同様に.tar.gzと.whlをsetuptoolsと名付けたフォルダに保存し、py -m pip install -U --no-index --find-links=setuptools setuptools
でインストール(アップデート)しました。
※-U
オプションは--upgrade
です。
setuptoolsも対応バージョンにアップデートできたし、いざpandasインストール!再びエラーを吐きました。
>py -m pip install --no-index --find-links=pandas pandas
Looking in links: pandas
Processing c:\users\test\desktop\test\pandas\pandas-1.4.1-cp310-cp310-win_amd64.whl
ERROR: Could not find a version that satisfies the requirement numpy>=1.21.0; python_version >= "3.10" (from pandas) (from versions: none)
ERROR: No matching distribution found for numpy>=1.21.0; python_version >= "3.10"
numpyが足りないぞと言われています。そう、pandasには依存しているライブラリがあります。
pip install
であれば、依存するライブラリも一緒にインストールしてくれたりするんですが、やはりローカルでインストールを試みている以上、事前に依存ライブラリがなければインストールに失敗するみたいです。
参考までに、私の環境でpandasインストールするときに要求された各ライブラリとバージョンは以下です。
ライブラリ名 | バージョン |
---|---|
numpy | 1.21.0 |
python-dateutil | 2.8.2 |
pytz | 2020.1 |
six | 1.5 |
tzdata | 2022.1 |
これらのライブラリも同様にPyPIから落としてローカルでインストールしました。
ちなみに、python-dateutilはsixに依存しているのでpython-dateutilより先にsixをインストールする必要がありました。
まとめ
今回は、pip install
がネットワークの関係上使用できないときにローカルでPythonライブラリをインストールする方法について備忘録として記述しました。
プロキシを通せれば一番良かったのですが、自分でどうにかできないかと手法を探ってみました。pip install
ないしはpip download
が使えなくて困った場合に役に立てたら光栄です。
実は、pandasの依存ライブラリが不足しているとき、py -m pip install 中略 pandas
を1度実行するたびに1つしか不足ライブラリを挙げてくれず、何度もpy -m pip install 中略 pandas
を実行して依存ライブラリが不足していると言われるというのを繰り返していました。先に依存ライブラリを調べてまとめてインストールすればよかったですね。
余談ですが、自作のライブラリをインストールするときにも今回の手法は応用できます。
ライブラリを自作するようなつよつよエンジニアには釈迦に説法な記事でしたが、最後までお読みいただきありがとうございました。