Skip to content

Controllare e aggiungere il percorso di ricerca del modulo con sys.path in Python

Python

In Python, l’elenco delle directory cercate durante l’importazione di moduli e pacchetti con import, il percorso di ricerca del modulo, è archiviato in sys.path.

Questo articolo descrive come controllare i percorsi di ricerca del modulo corrente e aggiungerne di nuovi.

  • Controllare il percorso di ricerca del modulo con sys.path
  • Aggiungi un nuovo percorso di ricerca del modulo con sys.path.append()
  • Aggiungi un nuovo percorso di ricerca del modulo con PYTHONPATH
  • Aggiungi un nuovo percorso di ricerca del modulo con il file di configurazione del percorso (.pth)

Vedere l’articolo seguente per l’utilizzo di base dell’importazione.

Controllare il percorso di ricerca del modulo con sys.path

Il percorso di ricerca del modulo corrente è memorizzato in sys.path.

sys.path è un elenco di stringhe che specificano il percorso di ricerca del modulo. Puoi controllare gli elementi con la stampa().

In questo esempio, pprint viene utilizzato per semplificare la lettura.

import sys
import pprint

pprint.pprint(sys.path)

Quando viene eseguito, il risultato è il seguente.

pwd
# /Users/mbp/Documents/my-project/python-snippets/notebook

python3 print_sys_path.py
# ['/Users/mbp/Documents/my-project/python-snippets/notebook',
#  '/Users/mbp/Documents/lib',
#  '/Users/mbp/Documents/my-project/python-snippets/notebook',
#  '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip',
#  '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7',
#  '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload',
#  '/usr/local/lib/python3.7/site-packages']

Il risultato dipende dall’ambiente. Nell’ambiente di esempio (Mac con Python3 installato da Homebrew), le seguenti directory sono archiviate in sys.path.

  1. La directory contenente il file di script eseguito (.py)
  2. La directory impostata dalla variabile d’ambiente PYTHONPATH (vedi sotto per i dettagli)
  3. La directory di lavoro corrente
  4. Tre directory per la libreria standard
  5. La directory dei pacchetti del sito per le librerie di terze parti installate con pip

Se si sposta la directory corrente nel terminale e la si esegue nuovamente, 3. la directory corrente cambia in un altro percorso.

cd ..

pwd
# /Users/mbp/Documents/my-project/python-snippets

python3 notebook/print_sys_path.py
# ['/Users/mbp/Documents/my-project/python-snippets/notebook',
#  '/Users/mbp/Documents/lib',
#  '/Users/mbp/Documents/my-project/python-snippets',
#  '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python37.zip',
#  '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7',
#  '/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload',
#  '/usr/local/lib/python3.7/site-packages']

Poiché il percorso di ricerca del modulo cambia a seconda della directory corrente, l’importazione potrebbe non funzionare a seconda di dove viene il eseguito file di script.

I moduli vengono cercati nell’ordine di sys.path. Pertanto, vengono prima ricercati i moduli nella directory contenente il file di script eseguito (.py). Si noti che se è presente un file con lo stesso nome della libreria standard nella stessa directory del file di eseguito script, quel file viene importato.

Aggiungi un nuovo percorso di ricerca del modulo con sys.path.append()

Poiché sys.path è solo un elenco, puoi aggiungere nuovi percorsi. In questo esempio viene utilizzato il metodo append(), ma puoi anche usare il metodo insert() e così via.

Se importi dopo aver aggiunto un percorso a sys.path, puoi importare i moduli nel percorso aggiunto.

Ad esempio, se vuoi aggiungere una directory un livello sopra il file di script, puoi scrivere quanto segue.

import os
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), '..'))

L’aggiunta a sys.path è attiva solo in quel codice. Se desideri aggiungere percorsi in modo permanente, utilizza i file PYTHONPATH o .pth descritti di seguito.

Aggiungi un nuovo percorso di ricerca del modulo con PYTHONPATH

Utilizzare la variabile di ambiente PYTHONPATH per aggiungere permanentemente il percorso di ricerca del modulo.

Per sistemi operativi simili a Unix, incluso Mac, aggiungi quanto segue a ~/.bashrc, ad esempio. Per più specificare percorsi, separali con due punti :.

export PYTHONPATH="/path/to/add:$PYTHONPATH"

In Windows, puoi aggiungere PYTHONPATH e le normali variabili di ambiente facendo clic con il pulsante destro del mouse sul tuo PC (Risorse del computer) -> Sistema -> Proprietà del sistema -> Variabili d’ambiente. In Windows, separa più percorsi con un punto e virgola ;.

La directory ‘/Users/mbp/Documents/lib’ nell’esempio precedente viene aggiunta a PYTHONPATH.

Aggiungi un nuovo percorso di ricerca del modulo con il file di configurazione del percorso (.pth)

Vedi inserire un file di configurazione del percorso (.pth) nella directory dei pacchetti del sito, puoi aggiungere percorsi di ricerca del modulo.

Il file di configurazione del percorso (.pth) deve contenere un percorso per riga. Può essere un percorso relativo o un percorso assoluto. È possibile scrivere un commento con #. Il nome del file può essere qualsiasi cosa purché l’estensione sia pth.