Man ir šāda failu struktūra:
Folder
Common
foo1.py
TestFolder
foo2.py
Es gribu importēt foo2.py
un foo1.py
. Es mēģināju, bet tas nedarbojas Ubuntu:
sys.path.append(os.path.abspath('../../'))
from Common import foo1.py
Kā Python atrod savus moduļus
Stingri runājot, modulis ir atsevišķs python fails, savukārt pakete ir mape, kurā ir python faili, kopā ar (var būt tukšs) failu ar nosaukumu __init__.py
, lai python norādītu, ka tā ir pakete, no kuras importēt moduļus. Abos gadījumos moduļiem ir nepieciešams paplašinājums .py
, bet to importēšana tiek veikta bez tā (skat. tālāk).
Pēc noklusējuma Python meklē savus moduļus un paketes $PYTHONPATH
.
Lai uzzinātu, kas ir iekļauts $PYTHONPATH, palaidiet šādu kodu python (3):
import sys
print(sys.path)
Kā pievienot direktoriju
Atkārtoti
Python failā var pievienot ceļu(-us), reizēm pievienojot noklusējuma ceļu, pievienojot šādas rindiņas savas python lietojumprogrammas vai skripta galvenes sadaļā:
import sys
sys.path.insert(0, "/path/to/your/package_or_module")
Piemēram:
ja man ir mape: Ja es gribu importēt failu module_1.py
, kas atrodas šajā direktorijā, es pievienoju šādu tekstu sava koda galvenajā daļā:
import sys
sys.path.insert(0, "/home/myname/pythonfiles")
Un es varu vienkārši importēt failu module_1.py
, izmantojot:
import module_1
Kad es izveidoju pakotni un gribu importēt moduli(-us) no pakotnes, man ir jāizveido mape $PYTHONPATH
, kurā ir moduļi, kopā ar (var būt tukšs) failu __init__.py
.
Piemēram:
Lai importētu no paketes (mapes) ar nosaukumu my_package
, kas atrodas mapē /home/myname/pythonfiles
, pievienojiet /home/myname/pythonfiles
ceļu savam $PYTHONPATH
, kā 1. piemērā, un importējiet moduli ar nosaukumu module_2.py
(paketes mapē) vienkārši ar: `
from <packagename> import module_2
Katalogu pievienošana $PYTHONPATH
pastāvīgi:
Pievienojiet šādu rindu savam ~/.profile
failam.
export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add
Papadirektoriji
Paketes iekšienē apakšdirektoriji netiek iekļauti tikai tā vienkārši; ir nepieciešams "ķēdēt" direktorijus. Lai importētu moduli module_3.py
, mapē apaketes nosaukums
, mapē apaketes nosaukums
:
import packagename.subfolder.module_3
Ņemot vērā to, ka visas paketes apakšmapes ietver savu __init__.py
failu.
Ja modulis atrodas tajā pašā direktorijā, kur skripts vai lietojumprogramma
Ja modulis atrodas tajā pašā direktorijā, kur skripts vai lietojumprogramma, ceļš līdz modulim nav jāievada, tas tiek pievienots automātiski.
Piemērs:
Ja man ir mape, kurā ir script.py
un module.py
, es varu vienkārši importēt moduli ar:
import module
NB: Šī atbilde ir novecojusi jaunākajai Python 3 versijai, bet ir šeit agrākai versijai. Lai iegūtu vairāk informācijas, izlasiet komentārus un https://www.python.org/dev/peps/pep-0420/
Būtībā katrai mapei ar python kodu, ko vēlaties pievienot syspath, ir nepieciešams __init__.py fails. Šie __init__.py faili var būt tukši.