Come aggiungere un modulo Python a syspath?

Ciao ho una struttura di file come questa

Folder Common foo1.py TestFolder foo2.py 

Voglio importare in foo2.py foo1.py. Ho provato ma non funziona su Ubuntu:

 sys.path.append(os.path.abspath('../../')) from Common import foo1.py 

Come python trova i suoi moduli

Assunto rigorosamente, un modulo è un singolo file python, mentre un pacchetto è una cartella contenente file python, accompagnato da un file (può essere vuoto) chiamato __init__.py , per dire a python che è un pacchetto da cui importare i moduli. In entrambi i casi, i moduli hanno bisogno della loro estensione .py , ma l’importazione è fatta senza (vedi sotto).

Di default, Python cerca i suoi moduli e pacchetti in $PYTHONPATH .

Per scoprire cosa è incluso in $ PYTHONPATH, esegui il seguente codice in python (3):

 import sys print(sys.path) 

Come aggiungere una directory

incidentalmente

Dall’interno di un file python, puoi aggiungere percorsi (s) tra l’altro al percorso predefinito aggiungendo le seguenti righe nella sezione head della tua applicazione o script python:

 import sys sys.path.insert(0, "/path/to/your/package_or_module") 

Per esempio:

se ho una cartella: /home/myname/pythonfiles , e voglio importare il file module_1.py , che si trova in quella directory, lo aggiungo alla sezione head del mio codice:

 import sys sys.path.insert(0, "/home/myname/pythonfiles") 

E posso semplicemente importare il file module_1.py da:

 import module_1 

Quando creo un pacchetto e voglio importare i moduli dal pacchetto, ho bisogno di creare una cartella in $PYTHONPATH , contenente i moduli, accompagnata da un file (può essere vuoto) chiamato __init__.py

Per esempio:

Per importare da un pacchetto (cartella) chiamato my_package in /home/myname/pythonfiles , aggiungi il percorso /home/myname/pythonfiles al tuo $PYTHONPATH , come nell’esempio 1, e importa il modulo chiamato module_2.py (all’interno della cartella del pacchetto ) semplicemente con: `

 from  import module_2 

Aggiunta di directory a $PYTHONPATH permanente:

Aggiungi la seguente riga al tuo file ~/.profile .

 export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add 

sottodirectory

All’interno di un pacchetto, le sottodirectory non sono incluse nello stesso modo; è necessario “concatenare” le directory. Per importare un modulo module_3.py , all’interno della cartella subfolder all’interno della cartella packagename :

 import packagename.subfolder.module_3 

Dato che tutte le sottocartelle nel pacchetto includono il proprio file __init__.py .

Quando un modulo si trova nella stessa directory dello script o dell’applicazione

Non è necessario inserire il percorso di un modulo quando si trova nella stessa directory dello script o dell’applicazione, viene aggiunto automaticamente.

Esempio:

Se ho una cartella, contenente module.py e module.py , posso semplicemente importare il modulo tramite:

 import module 

Il modo corretto di utilizzare l’importazione relativa è:

 from ..Common import foo1 

E hai anche bisogno di un __init__.py in tutte le tue cartelle.

NB: Questa risposta è obsoleta per l’ultima versione di python 3, ma è qui per la versione precedente. Per maggiori informazioni leggi i commenti e https://www.python.org/dev/peps/pep-0420/


Essenzialmente ogni cartella con codice Python che si desidera aggiungere a syspath necessita di un file __init__.py. Questi file __init__.py possono essere vuoti.