32bitバイナリが用意されていないPythonライブラリをpip installする(Windows)
概要
32bitと64bitの共存の方法
- 32bitと64bitのpython環境を共存するにはvitualenvで仮想環境を作るのがよさそう。
32bit pythonでpip installエラーの解消
- 32bit版でpip installするとerror: metadata-generation-failedでエラーを起こすときは32bit版の事前にビルドされたPythonパッケージがないようなので自分でビルドする必要がある。
- 難しいかと思ったら意外と簡単で以下の手順で可能
- Visual Studioをインストールする。(自分の場合はVS2022をインストール)
- x86 Native Tools Command Prompt for VS2022を開き、このツール上でpip installする。仮想環境を使用している場合は上記プロンプト上で仮想環境をアクティベートしてからpip installする
背景
JRA-VAN Data Lab.というサービスを使用するためにJV-Linkというモジュールを使用する必要があるがこれは、古のActiveX COMコントロールで32bit pythonからしか使えない。
前回の記事では手っ取り早く環境を構築するためにAnacondaの32bitを使っていて、実際に競馬予想環境を構築して今でも運用している。
当時はPythonの仮想環境の有用性(というより仮想環境を使わないときの有害性)を知らなかったので、Anacondaの"base"環境に何もかも放り込んで使用していた。
年月が経ってPythonを色々な用途で使いたいときには仮想環境で構築したほうがよいという話をなんとなく理解したのと、新PCを組み立ててWindows11をクリーンインストールしたのとで自分に必要なライブラリだけ使った仮想環境を構築しようとした。(結果四苦八苦した)
32bit環境と64bit環境の共存の方法
JV-Linkを使用する際は32bit pythonが必要だが、普通の用途では64bit pythonを使ったほうが無難と思ったので共存する方法を調べた。
インストール自体は問題なくできる
python自体は32bitも64bitもデフォルトで別フォルダにインストールされるので共存自体は特段問題はない。
自分の場合はpython3.12の32bit版と64bit版をインストールし、
64bit版はpython312、32bit版はPython312-32というフォルダが
"ユーザーディレクトリ\AppData\Local\Programs\Python"の下に作られた。
32bit環境はvirtualenvで仮想環境として構築する
仮想環境を作るには一般的にはvenvだが、これはpython自体のバージョンは固定でライブラリのバージョンを管理するためのもの、と現時点では理解している。
今回はpython自体のバージョンを管理する用途と似ているのでvirtualenvを使用する。
64bit pythonのほうをデフォルトにしたいので64bit pythonにvirtualenvをpipでインストールした。
優先されるpythonのバージョンとビットを確認するのは色々方法があるけどターミナルにpythonとだけ入力するのが一番楽そう。抜けるのはexit()で抜ける。
64 bit (AMD64)って出る場合は64bitのpythonで動いている
32bitだったら、環境変数の設定で32bitのパスを削除して64bitのほうだけにするのが簡単かも。
> python
Python 3.12.6 (tags/v3.12.6:a4a2d2b, Sep 6 2024, 20:11:23) [MSC v.1940 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
64bit版で動いていることを確認してからvirtualenvをインストール
> pip install virtualenv
virtualenvで32bit python(python312-32)の仮想環境を環境名"py32"をつくる
> cd (仮想環境を作りたいフォルダ)
> virtualenv -p python312-32 py32
これでpy32というフォルダ下に仮想環境が作られる。
仮想環境をアクティベートして32bit環境となっているか確認する。
32 bit(Intel)とでるので32bit版で動いている。
> .\py32\scripts\activate
(py32)>python
Python 3.12.6 (tags/v3.12.6:a4a2d2b, Sep 6 2024, 19:51:05) [MSC v.1940 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
という感じでデフォルトだと64bit環境、32bit環境を使いたい場合はvirtualenvで仮想環境を作ることで共存ができそう。
32bit pythonでpip installエラーの解消
32bitのホイールが用意されていない場合のエラー
たいていの場合は32bit環境でもpip installでライブラリをインストールできるのだが、エラーとなりインストールが終了しないライブラリがある。
例えばデータ解析のためにpandasをpip install しようとすると
(py32)> pip install pandas
~~
error: subprocess-exited-with-error
~~
error: metadata-generation-failed
となりインストールに失敗する。
調べたところ、pandasバージョン2.1から32ビット版のホイール(バイナリパッケージ)の提供を停止しているとのこと。
ライブラリをソースからビルドするかWSLを使うことをお勧めすると書いてあるがActiveXを使うのでWSLは使えなさそう[1]。
なら32bitのバイナリが提供されていた2.1以前の古いバージョンならいけるかと思ったけど今度はNumpyのバージョンが合わずにうまくいかない・・・と四苦八苦。
ビルドするしかない?
結局ビルドするしかないかと思い、先ほどの提供停止のスレッドで示されていたリンクを参考に準備。
Step 1: install a C compilerにあるWindowsの場合に沿ってVisual Studio 2022 用ビルド ツールをインストール。
そして普通なら素直にStep2,Step3と進めればよいのだが、
x86 Native Tools Command Prompt for VS 2022を開いてpip installするとうまくいったという情報を見つけた。
え、そんなのでいいの?ということで、「x86 Native Tools Command Prompt for VS 2022」を開き、構築した32bit環境をアクティベート、そしてpip install [2]
> .\py32\scripts\activate
(py32)> pip install pandas
~~
Successfully installed numpy-2.1.1 pandas-2.2.3 pytz-2024.2 six-1.16.0 tzdata-2024.2
え、うまくいったんだけど・・・ということで一週間くらい悩んだ問題が解決。
一旦インストールに成功すれば、いつも使っているターミナルでも使えているので問題なし。
pandasだけでなく、他のライブラリでも同様のエラーがでたが同じ方法で対処できた。
Discussion