本文へ移動
Vast Cowのブログ
前のページへ戻る

pipを使わずにwhlをダウンロードして展開する

この記事を編集

pip を使わずに .whl ファイルをダウンロードして展開するには、curl または wget でダウンロードし、unzip または Python 標準ライブラリの zipfile で展開します。

.whl は ZIP 形式のファイルなので、展開自体に pip は不要です。

1. whlファイルをダウンロードする

PyPI のパッケージページから .whl のダウンロード URL を取得します。

例:https://pypi.org/project/requests/#files

curlを使用する場合

curl -L -o package.whl "https://files.pythonhosted.org/.../package.whl"

wgetを使用する場合

wget -O package.whl "https://files.pythonhosted.org/.../package.whl"

※ URL は実際の wheel ファイルの URL に置き換えてください。

2. whlファイルを展開する

方法A:unzipを使う

mkdir extracted
unzip package.whl -d extracted/

方法B:Python標準ライブラリを使う

import zipfile

with zipfile.ZipFile("package.whl") as z:
    z.extractall("extracted")

3. PyPI APIを使ってダウンロードから展開まで自動化する

pip や外部コマンドを使用せず、Python 標準ライブラリだけで実現できます。

import json
import urllib.request
import zipfile
from pathlib import Path

package = "requests"
version = "2.32.3"

# PyPI APIからパッケージ情報を取得
url = f"https://pypi.org/pypi/{package}/{version}/json"

with urllib.request.urlopen(url) as response:
    data = json.load(response)

# wheelファイルを取得
wheel = next(
    f for f in data["urls"]
    if f["filename"].endswith(".whl")
)

wheel_path = Path(wheel["filename"])

# ダウンロード
urllib.request.urlretrieve(wheel["url"], wheel_path)

# 展開
output_dir = Path("extracted")
output_dir.mkdir(exist_ok=True)

with zipfile.ZipFile(wheel_path) as z:
    z.extractall(output_dir)

print(f"Downloaded: {wheel_path}")
print(f"Extracted: {output_dir}")

このコードは、対象バージョンの最初の wheel を取得します。複数の wheel が存在するパッケージでは、Python バージョン・OS・CPU アーキテクチャとの互換性を別途確認する必要があります。

4. 展開後のディレクトリ構造

例えば requests の場合、以下のようになります。

extracted/
├── requests/
│   ├── __init__.py
│   ├── api.py
│   ├── sessions.py
│   └── ...
└── requests-2.32.3.dist-info/
    ├── METADATA
    ├── WHEEL
    └── RECORD

展開したパッケージを import したい場合は、次のようにします。

import sys

sys.path.insert(0, "extracted")

import requests

ただし、requests が依存するライブラリも別途必要です。展開だけでは依存関係は自動的に解決されません。

5. 注意事項

まとめ

目的方法
whlをダウンロードcurl / wget
whlを展開unzip
Pythonだけで展開zipfile
PyPIから自動取得urllib.request + PyPI API
展開したパッケージを参照sys.path に展開先を追加

結論: .whl は ZIP ファイルなので、pip を使わずにダウンロード・展開できます。ただし、展開と正式なインストールは異なるため、実行時の依存関係や互換性には注意が必要です。


この記事を編集
この記事を共有:

コメント


前の記事
Emacsで選択範囲のインデントを手動調整する方法:indent-rigidlyの使い方
次の記事
Certbotで無料SSL証明書を取得する方法と、DNS-01に対応した無料DDNSサービスの比較