Jeg har en filstruktur som følger:
Folder
Common
foo1.py
TestFolder
foo2.py
Jeg ønsker at importere i foo2.py
og foo1.py
. Jeg har prøvet, men det virker ikke på Ubuntu:
sys.path.append(os.path.abspath('../../'))
from Common import foo1.py
Hvordan python finder sine moduler
Strengt taget er et modul en enkelt python-fil, mens en pakke er en mappe med python-filer, ledsaget af en (kan være tom) fil med navnet __init__.py
, for at fortælle python, at det er en pakke, som man kan importere moduler fra. I begge tilfælde skal modulerne have deres .py
-udvidelse, men import af dem sker uden (se videre nedenfor).
Som standard leder Python efter sine moduler og pakker i $PYTHONPATH
.
For at finde ud af, hvad der er inkluderet i $PYTHONPATH, skal du køre følgende kode i python (3):
import sys
print(sys.path)
Sådan tilføjer du en mappe
Ugevis
Fra en python-fil kan du tilføje sti(er) lejlighedsvis til standardstien ved at tilføje følgende linjer i head-sektionen af dit python-program eller script:
import sys
sys.path.insert(0, "/path/to/your/package_or_module")
For eksempel:
hvis jeg har en mappe: /home/myname/pythonfiles
, og jeg ønsker at importere filen module_1.py
, der ligger i denne mappe, tilføjer jeg dette til head-sektionen af min kode:
import sys
sys.path.insert(0, "/home/myname/pythonfiles")
Og jeg kan simpelthen importere filen module_1.py
ved at:
import module_1
Når jeg opretter en pakke og ønsker at importere modul(er) fra pakken, skal jeg oprette en mappe i $PYTHONPATH
, som indeholder modulerne, ledsaget af en (kan være tom) fil kaldet __init__.py
For eksempel:
For at importere fra en pakke (mappe) kaldet my_package
i /home/myname/pythonfiles
, skal du tilføje stien /home/myname/pythonfiles
til din $PYTHONPATH
, som i eksempel 1, og importere modulet kaldet module_2.py
(inde i pakkemappen) simpelthen med: `
from <packagename> import module_2
Hæver mapper til $PYTHONPATH
permanent:
Tilføj følgende linje til din fil ~/.profile
.
export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add
Underkataloger
Fra en pakke inkluderes undermapper ikke bare sådan uden videre; du er nødt til at "kæde" mapperne. For at importere et modul module_3.py
, inde i mappen subfolder
inde i mappen packagename
:
import packagename.subfolder.module_3
I betragtning af at alle undermapper i pakken indeholder deres egen fil __init__.py
.
Når et modul er i samme mappe som scriptet eller programmet
Det er ikke nødvendigt at indsætte stien til et modul, når det er i samme mappe som scriptet eller programmet, det tilføjes automatisk.
Eksempel:
Hvis jeg har en mappe, der indeholder script.py
og module.py
, kan jeg simpelthen importere modulet ved at:
import module
NB: Dette svar er forældet for den nyeste version af python 3, men er her for tidligere versioner. For yderligere oplysninger læs kommentarerne og https://www.python.org/dev/peps/pep-0420/
I det væsentlige hver mappe med python-kode, som du ønsker at tilføje til syspath, har brug for en __init__.py-fil. Disse _\init_\.py-filer kan være tomme.