ARM64_Lab

pip install が ARM64 Windows で通るか、主要20パッケージを実際に試した

この記事の見出し
  1. wheel だけを取りに行く
  2. 取得できたもの、落ちたもの
  3. cryptography と psutil の tag が違う
  4. polars だけ挙動が読めなかった
  5. 詰まるとしたらどこか
  6. いつまで有効な情報か

numpy 2.5.1 も pandas 3.0.5 も scipy 1.18.0 も、ARM64 版 Windows の Python 3.12 でそのまま入る。2026年8月2日に手元で確かめた結果だった(この時点の pip と配布状況にかなり依存する)。

ARM64 機を仕事で使うか迷っている人が一番気にするのが、たぶんこの点だと思う。C 拡張を含む Python パッケージは、対応する wheel が配布されていないとビルドから始まる。Visual Studio のビルドツールを入れて、失敗して、諦める(昔の Windows Python で何度か見た流れ)。あれをもう一度やりたい人は少ないはずだ。

wheel だけを取りに行く

インストールはせず、pip download でプラットフォームを固定して wheel の有無だけを見た。環境を汚さずに済むし、失敗したときも「今の venv が壊れたのではないか」と悩まずに済む。

pip download <パッケージ名> --no-deps --only-binary=:all: `
    --platform win_arm64 --python-version 312 -d .\wh

--only-binary=:all: を付けているので、ソース配布しかない場合はここで落ちる。つまり「落ちた=ARM64 用のバイナリが無い」と読める(ビルドできるかどうかは、今回は別の話にした)という切り分けになる。

pip は 25.0.1、Python は 3.12.10。どちらも Python312-arm64 配下のネイティブ版だ。

取得できたもの、落ちたもの

実際に試した20本のうち18本が取得できた、という話。

パッケージ 取得したファイル
numpy numpy-2.5.1-cp312-cp312-win_arm64.whl
pandas pandas-3.0.5-cp312-cp312-win_arm64.whl
scipy scipy-1.18.0-cp312-cp312-win_arm64.whl
pillow pillow-12.3.0-cp312-cp312-win_arm64.whl
lxml lxml-6.1.1-cp312-cp312-win_arm64.whl
cryptography cryptography-46.0.3-cp311-abi3-win_arm64.whl
psutil psutil-7.2.2-cp37-abi3-win_arm64.whl
matplotlib matplotlib-3.11.1-cp312-cp312-win_arm64.whl
aiohttp aiohttp-3.14.3-cp312-cp312-win_arm64.whl
duckdb duckdb-1.5.5-cp312-cp312-win_arm64.whl
orjson orjson-3.11.9-cp312-cp312-win_arm64.whl
regex regex-2026.7.19-cp312-cp312-win_arm64.whl

残りは greenlet 3.5.4、cffi 2.1.0、msgpack 1.2.1、ujson 5.13.0、pyyaml 6.0.3。どれも win_arm64 タグ付きで降ってきた。20本のうち18本、割合にすると9割が素通りしている。

落ちたのは2本だった。

ERROR: No matching distribution found for tiktoken

pyarrow も同じ文言で止まった。数秒で諦めてくれるので、長く待たされることはない(orjson のソースビルドで待ったときとは、失敗の質が違う)。

cryptography と psutil の tag が違う

細かい話だが、拾ったファイル名をよく見ると2つだけ形が違う(この差は、最初に表を作ったときには見落としていた)。

cryptography は cp311-abi3、psutil は cp37-abi3 になっている。安定 ABI 向けにビルドされた wheel で、Python 3.11 以降なら1つのファイルで通る作りになっている。Python を 3.13 に上げても、この2つは同じファイルが使い回されるはずだ。

Python のマイナーバージョンを上げたときに何が壊れるかを予測するとき、この tag は一度見てみる価値がある(地味だが、あとで効く)。

polars だけ挙動が読めなかった

polars は取得に成功したのだが、降ってきたのが polars-1.43.2-py3-none-any.whl だった(このファイル名だけでは、どこに実体があるのかすぐには読めない)。

py3-none-any はプラットフォーム非依存を意味する。Rust で書かれたライブラリなのに、なぜバイナリ抜きの wheel が win_arm64 向けに解決されたのか、まだ分かっていない。中身を展開して確認するところまではやっていないので、この点は未確認のまま残しておく。実際に import して動くかは別途試すことにした。

詰まるとしたらどこか

tiktoken が入らないのは、この環境では地味に効いた。トークン数を数える処理を書こうとして、そこで止まってしまった(ARM64 の話をしていると、こういう小さい依存で急に現実に戻される)。一覧では2本の失敗に見えるだけだが、実際にはその2本が自分の作業経路に刺さるかどうかで印象がかなり変わる。表の上では小さな例外に見えても、普段のスクリプトのど真ん中で使っている依存なら、その1本だけで ARM64 環境の使い勝手が急に変わってしまうし、代替実装を探すのか、x64 Python を横に置くのか、そもそも機能を諦めるのかまで一気に考えることになる。

回避策としては、HTTP 経由で数えるか、別実装に置き換えるか、x64 の Python を並行して入れてそちらで動かすか。3つ目は環境が二重になるので避けた。

pyarrow が無いのは、pandas の一部機能と、Parquet を直接読む処理に効く。この点は今のところ回避策を持っていなかった。Parquet を扱う必要が出たら別の手段を探すことになるが、まだその場面に当たっていないので未解決のまま置いてある。

念のため書いておくと、ここで測ったのは「wheel が配布されているか」だけだ。実際にインストールしてあるかは別の話で、手元の環境に入っているのは numpy 2.4.1、pandas 3.0.0rc2、Pillow 12.1.0、lxml 6.0.2、matplotlib 3.10.8 の5本。duckdb と polars と scipy は wheel が取得できることを確認しただけで、導入はしていない。

いつまで有効な情報か

wheel の配布状況は日単位で変わる。2026年8月2日時点の結果として読んでほしい。同じコマンドをコピーして自分の環境で叩けば、その日の答えが2分ほどで出る(逆に言うと、この表を長く保存して安心する用途には向かない)。

pip 自体からは 26.2 が出ているという通知が毎回表示された。バージョンを上げると解決の挙動が変わる可能性があるので、比べるときは pip のバージョンも揃えたほうがいい。2026年6月に一度 pip を上げてから numpy の解決が変わった経験があるので、この点は慎重にしている(同じパッケージ名でも、解決器の動きが変わると話がずれる)。

なお今回試したのは「wheel が存在するか」だけで、「入れて動くか」は別の話になる。18本すべてを import して走らせたわけではない。実際に入っているのは numpy と pandas と Pillow と lxml と matplotlib の5本で、いずれも import して問題は出ていない。残りは未確認のまま置いてある。

a
arm64lab — 個人運営

Surface Pro 11th Edition(Snapdragon X Elite)を2025年5月から常用機にしている個人の記録です。ARM64 版 Windows で詰まったところと、その場で測った値をそのまま書き残しています。特定の企業・団体とは関係がなく、いかなる組織を代表する見解でもありません。