In dit artikel leren we hoe u een module uit de bovenliggende map importeert. Vanaf Python 3.3 is het verwijzen naar of importeren van een module in de bovenliggende directory niet toegestaan. Uit onderstaand voorbeeld kun je dit duidelijk begrijpen.

In de bovenliggende map hebben we een submap, het geeks.py-bestand en in de submap hebben we een Python-bestand met de naam temp.py. Laten we nu proberen of we de geeks-module in de bovenliggende map kunnen importeren vanuit het temp.py-bestand in de submap.
geeks.py (module in de bovenliggende map)
Python3
voorwaartse ketening
def> geek_method():> > print> (> 'This method in geeks module.......bye'> )> |
>
>
temp.py (python-bestand in submap)
Python3
# importing the module in> # parent directory> from> parentdirectory> import> geeks> # calling the func1() method> # from geeks module> geeks.geek_method()> |
>
>
Zoals we eerder hebben besproken, is het niet mogelijk om een module uit de bovenliggende map te importeren, dus dit leidt tot een fout zoals deze.
Hertraceren (meest recente oproep als laatste)
Bestand C:/Users/sai mohan pulamolu/Desktop/parentdirectory/subdirectory/temp.py, regel 2, in
leeuw vergeleken met een tijgervan import-geeks van de bovenliggende map
ModuleNotFoundError: Geen module met de naam ‘parentdirectory’
Laten we nu leren hoe we een module uit het bovenliggende map:
Om een module te importeren, moet de map met die module aanwezig zijn op PYTHONPATH. Het is een omgevingsvariabele die de lijst met pakketten bevat die door Python worden geladen. De lijst met pakketten in PYTHONPATH is ook aanwezig in sys.path, dus zal het pad van de bovenliggende map aan de map worden toegevoegd. sys.pad.
Voor ons werk hanteren wij drie verschillende benaderingen die hieronder aan de hand van voorbeelden worden toegelicht.
Methode 1: Importeren vanuit de bovenliggende map met behulp van de sys.path-methode
Hier gebruiken we de sys-module en stellen we het pad rechtstreeks naar de vereiste module in.
Voeg de bovenliggende map toe aan de sys.pad de ... gebruiken toevoegen() methode . Het is een ingebouwde functie van de sys-module die kan worden gebruikt met een padvariabele om een specifiek pad toe te voegen waar tolken naar kunnen zoeken. Het volgende voorbeeld laat zien hoe dit kan worden gedaan.
Python3
Javafx
import> sys> # setting path> sys.path.append(> '../parentdirectory'> )> # importing> from> parentdirectory.geeks> import> geek_method> # using> geek_method()> |
>
>
Uitgang:
This method in geeks module.......bye>
Methode 2: Importeren vanuit de bovenliggende map met behulp van os.path.abspath() methode
Hier zullen we zowel de sys-module als de padmodule gebruiken om de map op te halen en het pad rechtstreeks naar de vereiste module in te stellen.
Syntaxis: os.pad.abspath(pad)
Parameter:
Pad: Een padachtig object dat een bestandssysteempad vertegenwoordigt.Retourtype: Deze methode retourneert een genormaliseerde versie van het padnaampad.
Eerst krijgen we de naam van de map waar het bestand temp.py momenteel het pad.pad (__file__) gebruikt. abspath(), voeg ten tweede de map toe aan het sys.pad .append om te controleren, we zullen de methode ervan gebruiken.
Python3
import> path> import> sys> # directory reach> directory> => path.path(__file__).abspath()> # setting path> sys.path.append(directory.parent.parent)> # importing> from> parentdirectory.geeks> import> geek_method> # using> geek_method()> |
anders als Java
>
>
Uitgang:
This method in geeks module.......bye>
Methode 3: Importeren vanuit de bovenliggende map met behulp van os.pad.mapnaam methode
Hier zullen we zowel de sys-module als de os-module gebruiken om de directory (zowel de huidige als de ouder) op te halen en het pad rechtstreeks naar de vereiste module instellen.
Syntaxis: os.pad.mapnaam(pad)
Parameter:
pad : Een padachtig object dat een bestandssysteempad vertegenwoordigt.Retourtype: Deze methode retourneert een tekenreekswaarde die de mapnaam van het opgegeven pad vertegenwoordigt.
Ten eerste halen we de huidige map op door de os.path.dirname (os.path.realpath(__file__)) te gebruiken, ten tweede halen we de bovenliggende map op door de os.path.dirname() te gebruiken, en tenslotte voegen we de ouder toe map naar de sys.pad om dit te controleren, zullen we de methode ervan gebruiken.
geïnstantieerde Java
Python3
import> sys> import> os> # getting the name of the directory> # where the this file is present.> current> => os.path.dirname(os.path.realpath(__file__))> # Getting the parent directory name> # where the current directory is present.> parent> => os.path.dirname(current)> # adding the parent directory to> # the sys.path.> sys.path.append(parent)> # now we can import the module in the parent> # directory.> import> geeks> geeks.geek_method()> |
>
>
Uitgang: