HOWTO · Python
Python パッケージ .whl ファイルをインストールする方法
Python パッケージの .whl ファイルをインストールする手順を示しています
このページの内容
Python の .whl ファイルをインストールするには、使用する Python インタープリターとプラットフォームに合ったホイールを選び、ターミナルで python -m pip install "/path/to/package.whl" を実行します。パッケージは、その python コマンドに対応する環境にインストールされます。ホイールはインストール用に用意されたパッケージ配布形式なので、通常は自分で展開せず、pip を使ってインストールします。
.whl ファイルとは
ホイールは、Python パッケージ用のビルド済み配布形式です。インストールツールが扱える構成で、パッケージのファイルとメタデータを含む ZIP 形式のアーカイブです。ホイールには Python コード、コンパイル済み拡張機能、またはその両方が含まれることがあります。互換性のあるホイールを使えば、通常、手元のマシンでパッケージをソースからビルドする必要はありません。
ファイル名では、配布物、バージョン、互換性タグを示す部分の後に .whl 拡張子が付きます。タグは、Python の実装とバージョン、アプリケーション・バイナリー・インターフェイス(ABI)、オペレーティングシステムやプロセッサーのプラットフォームなどを示します。py3-none-any と記されたホイールは、一般にプラットフォーム固有のバイナリーを含まず、Python 3 向けです。それ以外のホイールは、特定の Python ビルドやシステムに限られる場合があります。
互換性のあるホイールを選ぶ
パッケージの配布元、または信頼できるパッケージインデックスからファイルを入手します。ダウンロードする前にパッケージのインストール手順を確認し、インストール先で使う Python インタープリターとマシンにタグが合うホイールを選びます。パッケージ名が正しくても、別のオペレーティングシステム、プロセッサーアーキテクチャ、または Python ABI 向けにビルドされたファイルは使えないことがあります。
コマンドがどのインタープリターを指すか確認するには、python --version と python -m pip --version を実行します。Python 3 のコマンドが python3 のシステムでは、一貫して python3 を使ってください。Python を複数インストールしている場合や仮想環境を使う場合は、目的の環境を先に有効化するか、その環境のインタープリターのパスを直接指定します。これにより、ある環境にインストールしたパッケージを別の環境からインポートしようとする事態を避けられます。
ローカルのホイールは、インストール先のマシンでインターネットに接続できない場合や、接続が制限されている場合に便利です。インターネットに接続できるマシンでホイールと必要な依存パッケージのホイールをダウンロードし、インストール先に転送して、ローカルのファイルからインストールします。--no-index と --find-links オプションを使うと、pip に依存パッケージをローカルディレクトリから探させることができます。ただし、不足している依存パッケージが自動的に用意されるわけではありません。
pip で .whl ファイルをインストールする
python -m pip を使うと、python が指定するインタープリター上で pip を実行できます。次の例のパスを、ホイールの場所とファイル名に置き換えてください。
from pathlib import Path
import csv
import hashlib
import subprocess
import sys
import tempfile
import zipfile
with tempfile.TemporaryDirectory() as directory:
root = Path(directory)
wheel = root / "sample_wheel_demo-1.0-py3-none-any.whl"
dist_info = "sample_wheel_demo-1.0.dist-info"
files = {
"sample_wheel_demo.py": "message = 'wheel installed'\n",
f"{dist_info}/METADATA": (
"Metadata-Version: 2.1\n"
"Name: sample-wheel-demo\n"
"Version: 1.0\n\n"
),
f"{dist_info}/WHEEL": (
"Wheel-Version: 1.0\n"
"Generator: example\n"
"Root-Is-Purelib: true\n"
"Tag: py3-none-any\n"
),
}
record_path = f"{dist_info}/RECORD"
with zipfile.ZipFile(wheel, "w") as archive:
for name, contents in files.items():
archive.writestr(name, contents)
rows = []
for name, contents in files.items():
digest = hashlib.sha256(contents.encode()).digest()
import base64
encoded = base64.urlsafe_b64encode(digest).rstrip(b"=").decode()
rows.append((name, f"sha256={encoded}", str(len(contents.encode()))))
rows.append((record_path, "", ""))
import io
record = io.StringIO()
csv.writer(record, lineterminator="\n").writerows(rows)
archive.writestr(record_path, record.getvalue())
target = root / "installed"
result = subprocess.run(
[sys.executable, "-m", "pip", "install", "--no-index", "--no-deps",
"--target", str(target), str(wheel)],
capture_output=True, text=True,
)
if result.returncode == 0:
print("Installed sample-wheel-demo 1.0")
else:
print("Installation failed:", result.stderr.strip())
raise SystemExit(result.returncode)
この単体で実行できる例では、一時ディレクトリに小さなホイールを作成し、現在のインタープリターの pip で別のターゲットディレクトリにインストールします。手元にあるホイールには、python -m pip install "/path/to/package.whl" の形式を使います。パスを引用符で囲むと、ディレクトリ名やファイル名に空白が含まれていても扱えます。Windows では、"C:\Users\Ada\Downloads\package.whl" のようなパスを指定します。PowerShell とコマンドプロンプトのどちらでも、同じように引数を引用符で囲めます。この例が表示するメッセージは英語のままです。
オフラインで使うホイールと依存パッケージをダウンロード済みなら、次のように pip にそのディレクトリを指定します: python -m pip install --no-index --find-links "/path/to/wheels" "/path/to/package.whl"。ローカルに依存パッケージのファイルがなければ、pip はオフライン中にそれらを取得できません。
インストールエラーのトラブルシューティング
- 一致する配布物がない、またはホイールのタグが未対応: ホイールの Python、ABI、プラットフォームのタグが、使用するインタープリターとマシンに合っているか確認します。配布元から一致するビルドを入手するか、配布元が案内する別の対応済みインストール方法に従ってください。
- 依存パッケージが見つからない: pip のエラーメッセージを読み、どの依存パッケージが必要か確認します。互換性のある依存パッケージのホイールもインストールするか、インターネットに接続できる場合は、設定済みのパッケージインデックスから pip に解決させます。オフラインでインストールする場合は、必要な依存パッケージのホイールをすべてローカルディレクトリに含めてください。
- インストールはできたがインポートできない:
python -m pip --versionの結果と、アプリケーションの実行に使っているインタープリターを確認します。同じインタープリターで両方を実行するか、インストール前に正しい仮想環境を有効化してください。 - アクセスが拒否される: 自分が所有する仮想環境を使う方法を優先してください。システムのインタープリターでは
python -m pip install --user ...によるユーザー単位のインストールが適する場合もありますが、管理対象の環境では無効になっていることがあります。その場合は、環境の管理者の指示に従ってください。 pipコマンドが見つからない:python -m pipまたはpython3 -m pipを実行します。pip が利用できないというエラーが出る場合は、そのインタープリターについて Python の配布元が案内する pip のセットアップ手順に従ってください。- Git リポジトリにホイールがある: リポジトリをクローンすると、追跡対象のファイルがダウンロードされるだけです。パッケージがインストールされるわけではなく、互換性のあるホイールが含まれているとも限りません。プロジェクトのメンテナーの指示を確認し、公開済みのホイールファイルを探して、ローカルファイルを pip でインストールしてください。リポジトリのコードやダウンロードした成果物は、提供元の信頼性と検証方法を考慮して扱います。
問題が起きた場合は、pip のメッセージ全体を読み、原因が選択したホイール、依存パッケージ、Python 環境、または権限のどれにあるかを特定します。原因に対処してから、目的のインタープリターでインストールをやり直してください。