HOWTO · Python
Come installare un pacchetto Python da un file .whl
Scopri come scegliere un wheel compatibile, installare con pip un file .whl locale e risolvere gli errori di installazione più comuni.
In questa pagina
Per installare un file Python .whl, scegli un wheel compatibile con l’interprete Python e la piattaforma in uso, quindi esegui da un terminale python -m pip install "/path/to/package.whl". Il pacchetto verrà installato nell’ambiente associato a quel comando python. Un wheel è una distribuzione pronta per l’installazione: di norma si installa con pip, senza estrarne manualmente i file.
Che cosa sono i file .whl
Un wheel è un formato di distribuzione compilato per i pacchetti Python. È un archivio basato su ZIP che contiene i file del pacchetto e i metadati in una struttura riconosciuta dagli strumenti di installazione. Può includere codice Python, estensioni compilate o entrambi. Installare un wheel compatibile in genere evita di compilare il pacchetto dal codice sorgente sul proprio computer.
Il nome del file identifica la distribuzione, la versione e i tag di compatibilità; dopo il nome compare l’estensione .whl. I tag indicano, tra le altre cose, l’implementazione e la versione di Python, l’interfaccia binaria dell’applicazione (ABI) e il sistema operativo o la piattaforma del processore. In genere un wheel contrassegnato py3-none-any è destinato a Python 3 e non contiene componenti binari specifici per una piattaforma; altri wheel possono essere limitati a determinate build di Python o a specifici sistemi.
Scegliere un wheel compatibile
Scarica il file dal produttore del pacchetto o da un indice di pacchetti di cui ti fidi. Prima di scaricarlo, consulta le istruzioni di installazione del pacchetto e scegli un wheel con tag compatibili con l’interprete Python e il computer su cui vuoi installarlo. Un file creato per un altro sistema operativo, un’altra architettura del processore o un’ABI Python diversa potrebbe non essere utilizzabile, anche se il nome del pacchetto è corretto.
Per verificare a quale interprete fa riferimento un comando, esegui python --version e python -m pip --version. Nei sistemi in cui il comando per Python 3 è python3, usa python3 in modo coerente. Se hai più installazioni di Python o un ambiente virtuale, attiva prima l’ambiente desiderato oppure usa direttamente il percorso del relativo interprete. Così eviti di installare il pacchetto in un ambiente e poi tentare di importarlo da un altro.
Un wheel locale è utile quando il computer di destinazione ha accesso a Internet limitato o assente. Su un computer connesso, scarica il wheel e tutti i wheel delle dipendenze necessarie, trasferiscili sul computer di destinazione e installa dai file locali. Le opzioni --no-index e --find-links indicano a pip di cercare le dipendenze in una directory locale, ma non rendono automaticamente disponibili quelle mancanti.
Installare un file .whl con pip
Usa python -m pip per eseguire pip con l’interprete indicato da python. Sostituisci il percorso di esempio con la posizione e il nome del tuo wheel:
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)
Questo esempio autonomo crea un piccolo wheel in una directory temporanea e chiede a pip dell’interprete corrente di installarlo in una directory di destinazione separata. Per un wheel esistente, il comando ha questa forma: python -m pip install "/path/to/package.whl". Racchiudere il percorso tra virgolette permette di gestire spazi nei nomi delle directory o dei file. In Windows, usa un percorso come "C:\Users\Ada\Downloads\package.whl"; in PowerShell e nel Prompt dei comandi funziona la stessa forma con l’argomento tra virgolette. L’esempio mostra messaggi in inglese, che restano in inglese anche nell’articolo italiano.
Se hai scaricato il wheel e le sue dipendenze per un’installazione offline, indica a pip la directory che li contiene: python -m pip install --no-index --find-links "/path/to/wheels" "/path/to/package.whl". Senza i file locali delle dipendenze, pip non può scaricarle quando sei offline.
Risolvere gli errori di installazione
- Nessuna distribuzione corrispondente o tag del wheel non supportato: verifica che i tag Python, ABI e piattaforma del wheel siano compatibili con l’interprete e il computer. Scarica una build compatibile dal produttore oppure segui le istruzioni per un’altra modalità di installazione supportata.
- Manca una dipendenza: leggi il messaggio di errore di pip per individuare la dipendenza. Installa anche un wheel compatibile per quella dipendenza oppure, se hai accesso a Internet, lascia che pip la risolva tramite l’indice di pacchetti configurato. Per un’installazione offline, includi nella directory locale tutti i wheel delle dipendenze necessarie.
- Il pacchetto si installa ma non può essere importato: confronta
python -m pip --versioncon l’interprete usato per eseguire l’applicazione. Esegui entrambi tramite lo stesso interprete oppure attiva l’ambiente virtuale corretto prima dell’installazione. - Accesso negato: preferisci un ambiente virtuale di cui sei proprietario. Un’installazione a livello utente con
python -m pip install --user ...può essere adatta a un interprete di sistema, ma alcuni ambienti gestiti non la consentono; in tal caso segui le indicazioni dell’amministratore dell’ambiente. - Il comando
pipnon viene trovato: avvia pip conpython -m pipopython3 -m pip. Se il comando segnala che pip non è disponibile, segui le istruzioni documentate per configurare pip nella distribuzione Python di quell’interprete. - Un repository Git contiene un wheel: clonare il repository scarica soltanto i file tracciati; non installa un pacchetto e non garantisce che sia presente un wheel compatibile. Segui le istruzioni del manutentore del progetto, individua un wheel pubblicato e installa quel file locale con pip. Applica ai repository e agli artefatti scaricati le pratiche di fiducia e verifica appropriate per la loro provenienza.
In caso di errore, leggi per intero il messaggio di pip per capire se il problema riguarda il wheel scelto, una dipendenza, l’ambiente Python o i permessi. Risolvi la causa e ripeti l’installazione con l’interprete desiderato.