# Pip (gestore pacchetti)

Pip Installs Packages in sigla pip (o pip3 dalla versione 3 di Python) è uno strumento a linea di comando fondamentale nell'ecosistema Python. La sua funzione primaria è quella di gestire l'installazione, l'aggiornamento e la rimozione di pacchetti Python, ovvero di quelle librerie e moduli aggiuntivi che estendono le funzionalità di base del linguaggio.
È lo strumento raccomandato dalla Python Software Foundation per l'installazione delle applicazioni Python e delle relative dipendenze. Pip accede al Python Package Index un repository di pacchetti software scritti in Python dove gli sviluppatori possono cercare, scaricare e condividere pacchetti. Pip può anche essere configurato per connettersi ad altri repository (locali o remoti), a condizione che siano conformi alla Python Enhancement Proposal 503 che definisce un'interfaccia semplice e standardizzata per i repository di pacchetti.
La maggior parte delle distribuzioni Python hanno pip preinstallato. Python 2.7.9 e versioni successive (per quanto riguarda la serie python2) e Python 3.4 e versioni successive includono pip per impostazione predefinita.

## Storia

Pip è stato introdotto come pyinstall nel 2008 da Ian Bicking, creatore di virtualenv, quale alternativa a easy_install. Il nome "pip" è stato scelto tra una serie di suggerimenti ricevuti dal creatore stesso attraverso il suo blog. "Pip" è l'acronimo ricorsivo per "Pip Installs Packages".
Nel 2011, è stata creata la Python Packaging Authority (PyPA) da Bicking, guidata da Carl Meyer, Brian Rosner e Jannis Leidel.
L'obiettivo della PyPA è quello di supervisionare e migliorare gli strumenti e le infrastrutture di packaging di Python. Tra gli scopi della PyPa ci sono quelli di standardizzare la distribuzione e l'installazione di pacchetti Python anche attraverso le Proposte di Miglioramento di Python (PEP) che regolano i formati di packaging e le API. La Python Packaging Authority (PyPA) sviluppa e mantiene strumenti essenziali per il packaging, come pip, setuptools e il formato wheel. Con il rilascio della versione 6.0 di pip (22 dicembre 2014) è stato modificato il processo di denominazione della versione passando dalla numerazione in stile X.Y.1 alla più semplice X.Y. La nuova numerazione rende più evidente quando un aggiornamento introduce nuove funzionalità o comporta cambiamenti significativi.

## Interfaccia a riga di comando

L'interfaccia della riga di comando di pip consente l'installazione di pacchetti software Python attraversi uk comando: pip install nome-pacchetto
Gli utenti possono rimuovere il pacchetto con il comando: pip uninstall nome-pacchetto
pip consente di creare un elenco tutti i pacchetti Python e delle loro versioni specifiche necessari per un progetto. Una sorta di "ricetta" per ricostruire esattamente lo stesso ambiente Python su un altro computer o in un ambiente virtuale. Questo elenco prende il nome di 'requirements'.
Tale file consente di ricreare rapidamente e in modo efficiente l'intero ambiente di pacchetti Python su un altro computer o in un ambiente virtuale.
La generazione di tale file avviene tramite il comando: pip install -r requirements.txt
Per installare un pacchetto per una versione specifica di Python, pip fornisce il seguente comando, dove ${version} viene sostituito da 2, 3, 3.4, ecc.: pip${version} install nome-pacchetto

### Utilizzo setup.py

Pip consente l'installazione locale di progetti definiti dall'utente con l'uso di un file denominato setup.py. Questo metodo di installazione richiede che il progetto Python abbia la seguente struttura di file:
All'interno di questa struttura è possibile aggiungere un file setup.py nella directory principale del progetto (progetto_di_esempio in questo caso) con il seguente contenuto:
Dopodiché, sarà possibile installare questo progetto personalizzato eseguendo il seguente comando dalla directory radice del progetto: pip install -e .

## Repository personalizzato

Oltre al repository PyPI è possibile gestire repository personalizzati. Tali repository possono essere ubicati su un URL HTTP(s) o in una posizione del file system.
È possibile specificare un repository personalizzato utilizzando l'opzione -i o index-url, in questo modo: pip install -i https://repository_personale/esempio <package name> ; oppure con un file system: pip install -i /path/tuo/repository_personale/esempio <package name> .