Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

pip: il package manager per Python

Cos'è, come funzione e a cosa serve pip, il package manager che permette di installare e gestire i package disponibili sul repository PyPi.
Cos'è, come funzione e a cosa serve pip, il package manager che permette di installare e gestire i package disponibili sul repository PyPi.
Link copiato negli appunti

Nella lezione sui moduli abbiamo accennato brevemente alla possibilità di installare moduli e package aggiuntivi che non fanno parte della libreria standard. In questa appendice, vedremo come usare il package manager pip per installare moduli e package dal Python Package Index.

Il Python Package Index e pip

Il Python Package Index (PyPI) è un repository che contiene decine di migliaia di package scritti in Python. Chiunque può scaricare package esistenti o condividere nuovi package su PyPI. PyPI è anche conosciuto con il nome di Cheese Shop, dallo sketch del cheese shop di Monty Python.

È possibile accedere ai package del Python Package Index sia tramite un browser (all'indirizzo https://pypi.org/), sia tramite un tool chiamato pip.

pip è un tool che ci permette di cercare, scaricare ed installare package Python che si trovano sul Python Package Index. Il nome è un acronimo ricorsivo, che significa Pip Installs Packages. pip ci consente inoltre di gestire i package che abbiamo già scaricato, permettendonci di aggiornarli o rimuoverli.

Installare pip

pip è già incluso nelle versioni di Python >= 3.4 e >= 2.7.9. Per verificare se questo tool è già installato, possiamo eseguire il comando python3 -m pip -V o semplicemente pip3 -V dal terminale. Se pip è già installato, questo comando ci mostrerà la versione installata.

Se, invece, non abbiamo installato pip, possiamo rimediare semplicemente scaricando ed eseguendo con Python lo script get-pip.py.

Aggiornare pip

È anche consigliato verificare che la versione di pip sia sempre aggiornata. Per aggiornarlo, possiamo usare il comando python3 -m pip install -U pip, o più semplicemente pip install -U pip.

Usare pip

pip supporta una serie di comandi che ci permettono, tra le altre cose, di cercare, scaricare, installare, aggiornare e rimuovere package. Vediamo in dettaglio il funzionamento dei comandi più comuni.

Cercare package

Per cercare package nel Python Package Index, possiamo usare il comando python3 -m pip search KEYWORD. Ad esempio, se volessimo cercare il package BeautifulSoup, possiamo eseguire il comando seguente, osservando il relativo output:

$ python3 -m pip search beautifulsoup
beautifulscraper (1.1.0)
  - Python web-scraping library that wraps urllib2 and BeautifulSoup.
scrapy-beautifulsoup (0.0.2)
  - Simple Scrapy middleware to process non-well-formed HTML with BeautifulSoup
ipython-beautifulsoup (0.3)
  - Custom rendering of beautifulsoup objects in IPython notebook and qtconsole
django-beautifulsoup-test (1.1.3)
  - TestCase class for using BeautifulSoup with Django tests
BeautifulSoup (3.2.1)
  - HTML/XML parser for quick-turnaround applications like screen-scraping.
beautifulsoup4-slurp (0.0.2)
  - Slurp packages Beautifulsoup4 into command line.
beautifulsoup4 (4.6.0)
  - Screen-scraping library
  INSTALLED: 4.6.0 (latest)
beautifulsoupselect (0.2)
  - Simple wrapper to integrate BeautifulSoup and soupselect.py in a single package
collective.soupstrainer (2.0)
  - Clean up HTML using BeautifulSoup and filter rules.
Detextile (0.0.3)
  - Convert HTML to Textile syntax using BeautifulSoup.
spider-egg (0.1.0)
  - a template for python crawler with requests and beautifulsoup
ElementSoup (rev452)
  - ElementTree wrapper for BeautifulSoup HTML parser
...

Si noti che, oltre ai risultati della ricerca, l'ouput ci indica anche quali package sono installati e se ne esiste una versione più recente. In questo caso l'ultima versione di beautifulsoup è già installata.

Installare package

Per installare un package, basta eseguire python3 -m pip install PACKAGE. Ad esempio, se volessimo installare il package requests, possiamo eseguire:

$ python3 -m pip install requests
Collecting requests
  Downloading requests-2.18.4-py2.py3-none-any.whl (88kB)
    100% |████████████████████████████████| 92kB 1.3MB/s
Collecting urllib3<1.23,>=1.21.1 (from requests)
  Downloading urllib3-1.22-py2.py3-none-any.whl (132kB)
    100% |████████████████████████████████| 133kB 2.4MB/s
Collecting certifi>=2017.4.17 (from requests)
  Downloading certifi-2017.7.27.1-py2.py3-none-any.whl (349kB)
    100% |████████████████████████████████| 358kB 869kB/s
Collecting idna<2.7,>=2.5 (from requests)
  Downloading idna-2.6-py2.py3-none-any.whl (56kB)
    100% |████████████████████████████████| 61kB 3.7MB/s
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Using cached chardet-3.0.4-py2.py3-none-any.whl
Installing collected packages: urllib3, certifi, idna, chardet,
  requests
Successfully installed certifi-2017.7.27.1 chardet-3.0.4 idna-2.6
  requests-2.18.4 urllib3-1.22

Come possiamo vedere, pip non solo scarica e installa automaticamente il package, ma si assicura che tutte le dipendenze richieste dal package siano soddisfatte.

Se specifichiamo solo il nome del package, pip installerà automaticamente la versione più recente di esso. Se invece vogliamo installare una versione specifica, possiamo usare il comando python3 -m pip install 'package==X.Y.Z'. Ad esempio, il seguente comando installerà requests versione 2.16.5:

$ python3 -m pip install 'requests==2.16.5'
Collecting requests==2.16.5
  Downloading requests-2.16.5-py2.py3-none-any.whl (87kB)
    100% |████████████████████████████████| 92kB 911kB/s
Collecting urllib3<1.22,>=1.21.1 (from requests==2.16.5)
  Downloading urllib3-1.21.1-py2.py3-none-any.whl (131kB)
    100% |████████████████████████████████| 133kB 1.4MB/s
Collecting idna<2.6,>=2.5 (from requests==2.16.5)
  Downloading idna-2.5-py2.py3-none-any.whl (55kB)
    100% |████████████████████████████████| 61kB 2.9MB/s
Collecting certifi>=2017.4.17 (from requests==2.16.5)
  Using cached certifi-2017.7.27.1-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests==2.16.5)
  Using cached chardet-3.0.4-py2.py3-none-any.whl
Installing collected packages: urllib3, idna, certifi, chardet,
  requests
Successfully installed certifi-2017.7.27.1 chardet-3.0.4 idna-2.6
  requests-2.16.5 urllib3-1.22

È inoltre possibile usare gli operatori <, <=, >, >= per specificare versioni massime e minime. Queste espressioni si possono anche combinare usando la virgola (,), permettendoci di specificare sia una versione minima che una massima. Ad esempio, il seguente comando installerà la versione più recente di requests 2.16.x, ma non installerà la versione 2.17 o successive, anche se sono disponibili:

$ python3 -m pip install 'requests>=2.16,<2.17'
Collecting requests<2.17,>=2.16
  Using cached requests-2.16.5-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests<2.17,>=2.16)
  Using cached chardet-3.0.4-py2.py3-none-any.whl
Collecting urllib3<1.22,>=1.21.1 (from requests<2.17,>=2.16)
  Using cached urllib3-1.21.1-py2.py3-none-any.whl
Collecting idna<2.6,>=2.5 (from requests<2.17,>=2.16)
  Using cached idna-2.5-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests<2.17,>=2.16)
  Using cached certifi-2017.7.27.1-py2.py3-none-any.whl
Installing collected packages: chardet, urllib3, idna, certifi,
  requests
Successfully installed certifi-2017.7.27.1 chardet-3.0.4 idna-2.6
  requests-2.16.5 urllib3-1.22

Come possiamo vedere dall'output, pip ha installato la versione 2.16.5, cioè la versione più recente di requests 2.16.x.

Nel caso di applicazioni complesse che hanno diverse dipendenze, non è necessario installare manualmente tutti i package necessari a uno a uno. pip ci dà la possibilità di elencare le dipendenze in un file requirements.txt, e di eseguire il comando python3 -m pip install -r requirements.txt per installarle tutte simultaneamente.

Esistono infine diverse opzioni aggiuntive, che ci permettono anche di installare da repository diversi dal PyPI o direttamente da version control system. La descrizione di questa e altre opzioni avanzate può essere visualizzata eseguendo il comando python3 -m pip install --help (o python3 -m pip install -h).

Aggiornare package

Per aggiornare un package possiamo usare il comando install in combinazione con l'opzione -U o --upgrade. Ad esempio, per aggiornare il package requests alla versione più recente, possiamo usare:

$ python3 -m pip install -U requests
Collecting requests
  Using cached requests-2.18.4-py2.py3-none-any.whl
Collecting idna<2.7,>=2.5 (from requests)
  Using cached idna-2.6-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Using cached chardet-3.0.4-py2.py3-none-any.whl
Collecting urllib3<1.23,>=1.21.1 (from requests)
  Using cached urllib3-1.22-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests)
  Using cached certifi-2017.7.27.1-py2.py3-none-any.whl
Installing collected packages: idna, chardet, urllib3, certifi,
  requests
Successfully installed certifi-2017.7.27.1 chardet-3.0.4 idna-2.6
  requests-2.18.4 urllib3-1.22

Elencare package

Per vedere una lista di package installati, possiamo utilizzare il comando python3 -m pip list:

$ python3 -m pip list
apt-xapian-index (0.47)
apturl (0.5.2)
asn1crypto (0.22.0)
beautifulsoup4 (4.6.0)
certifi (2017.7.27.1)
chardet (3.0.4)
command-not-found (0.3)
cryptography (1.9)
cupshelpers (1.0)
distro-info (0.17)
html5lib (0.999999999)
httplib2 (0.9.2)
...

Aggiungendo l'opzione --outdated possiamo ottenere una lista di package che non sono correntemente aggiornati all'ultima versione.

È anche possibile visualizzare informazioni specifiche per un singolo package, usando il comando python3 -m pip show PACKAGE. Ad esempio, per vedere le informazioni sul package requests, possiamo eseguire:

$ python3 -m pip show requests
Name: requests
Version: 2.18.4
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.org
License: Apache 2.0
Location: .../lib/python3.6/site-packages
Requires: urllib3, certifi, chardet, idna

Disinstallare package

Per rimuovere un package che abbiamo installato in precedenza, basta eseguire python3 -m pip uninstall PACKAGE. Ad esempio, se volessimo rimuovere il package requests, possiamo eseguire:

$ python3 -m pip uninstall requests
Uninstalling requests-2.18.4:
  .../lib/python3.6/site-packages/requests-2.18.4.dist-info/DESCRIPTION.rst
  .../lib/python3.6/site-packages/requests-2.18.4.dist-info/INSTALLER
  .../lib/python3.6/site-packages/requests-2.18.4.dist-info/METADATA
  .../lib/python3.6/site-packages/requests-2.18.4.dist-info/RECORD
  .../lib/python3.6/site-packages/requests-2.18.4.dist-info/WHEEL
  .../lib/python3.6/site-packages/requests-2.18.4.dist-info/metadata.json
  .../lib/python3.6/site-packages/requests-2.18.4.dist-info/top_level.txt
  .../lib/python3.6/site-packages/requests/__init__.py
  ...
Proceed (y/n)? y
  Successfully uninstalled requests-2.18.4

Così come per il comando install, il comando uninstall ci permette di specificare un elenco di package da disinstallare mediante l'uso di un file requirements.txt e del comando python3 -m pip uninstall -r requirements.txt.

Controllare package

Infine, il comando python3 -m pip check ci permette di verificare se tutte le dipendeze dei package correntemente installati siano state soddisfatte o meno:

$ python3 -m pip check
No broken requirements found.

pip include altri comandi e opzioni, che possono essere esplorati usando i comandi python3 -m pip --help e python3 -m pip COMMAND --help. È anche possibile consultare online la documentazione ufficiale di pip.

Ti consigliamo anche