Python – Import modulu z jiného adresáře

Python – Import modulu z jiného adresáře

Při práci na velkých projektech se můžeme dostat do situace, kdy chceme importovat a modul z jiného adresáře. Z nějakého důvodu však modul nemusí být importován správně. Nyní si nedělejte starosti, pokud váš modul není správně importován. V tomto článku probereme způsoby, jak importovat modul z jiného adresáře.

Poznámka: Modul je pouze program v Pythonu, který končí .py rozšíření a složka obsahující modul se stane balíčkem.

Struktura adresáře:

 - Folder_1 - main.py - Folder_2 - module1.py 

Předpokládejme, že pro import jak importovat soubor v Pythonu máme dvě různé složky, jedna obsahuje main.py, což je náš hlavní Python soubor, kam chceme importovat module1 ze složky Folder_2.

Modul 1: obsahuje dvě funkce nazvané add a odd_even. Funkce add vezme dva argumenty a vrátí jejich sčítání. Funkce odd_even zabere pouze jeden argument a tisknout Sudé, pokud je číslo sudé, nebo vytisknout liché, pokud je číslo liché.

module1.py

Python3




# creating a simple add function> def> add(a, b):> > return> a> +> b> # creating a simple odd_even function> # to check if the number is odd or even> def> odd_even(n):> > if> n> %> 2> => => 0> :> > print> (> 'Even'> )> > else> :> > print> (> 'Odd'> )>

Pokud se pokusíme jednoduše importovat modul1 z Složka_2, narazíme na následující chybu.

main.py

Python3




# importing module1 from another folder> import> Folder_2> # calling odd_even function> module1.odd_even(> 5> )>

Výstup:

Chyba

ModuleNotFoundError , protože ve výchozím nastavení Python interpret zkontroluje soubor pouze v aktuálním adresáři a pro import modulů z jiného adresáře musíme ručně nastavit cestu k souboru. Můžeme to udělat různými způsoby. Tyto způsoby jsou podrobně popsány níže.

Metoda 1: Import modulu z jiného adresáře pomocí modulu sys

Můžeme použít sys.path přidat cestu k nové jiné složce (složce, ze které chceme importovat moduly) do systémové cesty, aby Python mohl také hledat modul v tomto adresáři, pokud nenajde modul v jeho aktuálním adresáři. Tak jako sys.path spadá pod třída typu seznamu takže můžeme snadno použít metodu vložení k přidání cesty ke složce.

Python3




# importing sys> from> module1> import> odd_even, add> import> sys> # adding Folder_2 to the system path> sys.path.insert(> 0> ,> '/home/amninder/Desktop/Folder_2'> )> # importing the add and odd_even> # function> # calling odd_even function> odd_even(> 5> )> # calling add function> print> (> 'Addition of two number is :'> , add(> 2> ,> 2> ))>

Výstup :

Pomocí sys

Metoda 2: Použití PYTHONPATH proměnná prostředí

Podobně, pokud nechcete používat sys modul pro nastavení cesty k novému adresáři. Proměnné PYTHONPATH můžete přiřadit cestu k adresáři a váš program bude stále fungovat.

v Linux , můžeme použít následující příkaz v terminálu k nastavení cesty:

exportovat PYTHONPATH='cesta/k/adresáři'

V systému Windows:

SET PYTHONPATH=cesta/k/adresáři

Chcete-li zjistit, zda proměnná PYTHONPATH obsahuje cestu k nové složce, můžeme použít následující příkaz:

echo $PYTHONPATH

Python3




# importing the add and odd_even function> from> module1> import> odd_even, add> # calling odd_even function> odd_even(> 5> )> # calling add function> print> (> 'Addition of two number is :'> , add(> 2> ,> 2> ))>

Výstup:

Pomocí PYTHONPATH

Předpokládejme, že máme strukturu adresářů, jako je tato:

- project - Folder_1 - main.py - Folder_2 - subfolder - new.py 

Nyní chcete importovat new.py modul od Složka_2 do složky_1 našeho projektu main.py soubor.

Syntax:

from project.folder.subfolder.filename import functionname

Python3




# importing sys> import> sys> # adding Folder_2/subfolder to the system path> sys.path.insert(> 0> ,> '/home/amninder/Desktop/project/Folder_2/subfolder'> )> # importing the hello> from> new> import> hello> # calling hello function> hello()>

Výstup:

Výstup