Import Pythonu z nadřazeného adresáře: Rychlý průvodce

Přistihli jste se někdy po kolena v souborech Pythonu a snažili jste se importovat modul z nadřazeného adresáře? Pokud ano, jste v dobré společnosti. Importní systém Pythonu může někdy vypadat jako klikaté bludiště, ale nebojte se, jsme tu, abychom vám pomohli s navigací!

Pro import z nadřazeného adresáře v Pythonu můžete použít modul sys . Vložením požadovaného adresáře do seznamu sys.path poskytnete interpretovi umístění požadovaného modulu. Po úpravě sys.path můžete importovat cílový modul pomocí standardního příkazu import.

Import Pythonu z nadřazeného adresáře: Rychlý průvodce

V tomto článku prozkoumáme, jak můžete importovat z nadřazených adresářů v Pythonu. Dále se podíváme na konkrétní případy použití importu, které vám pomohou lépe porozumět základní struktuře adresářů.

Jdeme do toho!

Obsah

Jak importovat v Pythonu

Přejdeme rovnou k dnešnímu tématu: import v Pythonu. Ty jednoduché řádky kódu na začátku vašich Python skriptů, které často začínají importem nebo z ? To jsou vaše vstupenky, jak využít sílu rozsáhlých knihoven a modulů Pythonu.

V této části si projdeme kód pro import z nadřazeného adresáře v Pythonu. Podíváme se také na potenciální chyby, které mohou nastat při importu modulů z nadřazeného adresáře.

Co je Python Import System?

Importní systém Pythonu umožňuje efektivní opětovné použití a organizaci kódu. Usnadňuje vám údržbu složitých projektů.

Chcete-li importovat modul nebo balíček v Pythonu, můžete použít příkaz import . Moduly jsou distribuovány jako balíčky, což jsou adresáře s kolekcí souborů Python.

Chcete-li importovat modul z nadřazeného adresáře, můžete použít modul sys.path k přidání nadřazeného adresáře do cesty Pythonu. Po přidání nadřazeného adresáře můžete modul importovat pomocí příkazu import .

Ukázka importu z nadřazeného adresáře

Abychom vám poskytli jasnou ukázku importu z nadřazeného adresáře, projdeme si řadu kroků, které vám pomohou pochopit celý proces.

1. Vytvoření potřebných adresářů a souborů

Nejprve otevřete Průzkumník souborů a přejděte na požadovaný místní disk. Používám svůj lokální disk E, proto vytvořím nový adresář s názvem my_project .

Uvnitř my_project vytvořte další adresář s názvem module_dir .

Nyní byste tedy měli mít:

E:
|-- /my_project
    |-- /module_dir

2. Přidání souborů Python

Dále vytvořte nový soubor .py s názvem main.py v adresáři my_project .

Poté vytvořte další soubor Python s názvem my_module.py v module_dir .

Vaše struktura by nyní měla vypadat takto:

E:
|-- /my_project
    |-- main.py
    |-- /module_dir
        |-- my_module.py

Pokud používáte Visual Studio Code , vaše adresářová struktura by měla vypadat takto:

Import Pythonu z nadřazeného adresáře: Rychlý průvodce

3. Úprava souborů Pythonu

Otevřete svůj my_module.py a přidejte následující kód:

def my_function():
    print("Hello from my_module!")

Pak pokračujte a uložte a zavřete soubor.

Nyní otevřete main.py a přidejte následující kód:

import sys
import os

# Get the parent directory
parent_dir = os.path.dirname(os.path.realpath(__file__))

# Add the parent directory to sys.path
sys.path.append(parent_dir)

# Import the module from the parent directory
from module_dir import my_module

# Use a function from my_module
my_module.my_function()

V tomto skriptu nejprve zjišťujeme umístění adresáře o úroveň výše od skriptu, který spouštíme (to je nadřazený adresář). Pak říkáme Pythonu, aby se také podíval do této nadřazené složky, když potřebuje importovat moduly.

Poté importujeme modul s názvem my_module , který je v adresáři s názvem module_dir umístěného v tomto nadřazeném adresáři. Nakonec voláme funkci s názvem my_function z my_module .

Po přidání výše uvedeného kódu soubor uložte a zavřete.

4. Spuštění kodexu

Chcete-li spustit tento kód, otevřete požadovaný terminál editoru kódu a spusťte soubor main.py. Pokud používáte Visual Studio Code, výstup by měl vypadat takto:

Import Pythonu z nadřazeného adresáře: Rychlý průvodce

Main.py importuje funkci z my_module.py , jak je znázorněno na obrázku výše.

Tento příklad podrobně ukazuje, jak funguje souborový systém a import z nadřazeného adresáře v Pythonu.

Jak zacházet s ImportError a ModuleNotFoundError v Pythonu

Python vyvolá výjimku ImportError , když modul, který se pokoušíte importovat, není během procesu importu nalezen.

ImportError je podtřídou výjimky ModuleNotFoundError . Vyvolá se, když importovaný modul neexistuje nebo jej nelze načíst.

Níže jsou uvedeny příklady scénářů, kdy k tomu může dojít:

  • Modul nebo balíček není v sys.path .

  • Název modulu nebo balíčku je napsán chybně nebo neexistuje.

  • Došlo k problému s kódem modulu, který brání správnému importu.

Pokud narazíte na tyto chyby, můžete použít následující řešení:

  • Dvojitá kontrola pravopisu a existence modulu nebo balíčku.

  • Přidání potřebného adresáře do sys.path pomocí append() nebo insert() .

  • Oprava všech problémů v kódu modulu, které by mohly bránit jeho importu.

Chcete-li se dozvědět více o zpracování chyb v Pythonu, podívejte se na následující video:

Poté, co pochopíte, jak funguje import v Pythonu, je také důležité, abyste se seznámili s adresářovou strukturou Pythonu.

Struktura adresářů a import jdou ruku v ruce, protože import vyžaduje pochopení struktury adresářů, takže si to projdeme v další části.

Adresářová struktura Pythonu

Pochopení adresářové struktury Pythonu je víc než jen vědět, kam umístit své skripty nebo kde najít knihovnu, kterou jste právě nainstalovali.

Je to jako mít čistý a dobře uspořádaný stůl: budete přesně vědět, kde co je, a vaše produktivita bude raketově stoupat, takže si v této části projdeme základy.

Struktura balíčku

Pro správnou organizaci je nezbytná adresářová struktura projektu Python. Pokud správně strukturujete svůj balíček, pomůže vám to minimalizovat možnost konfliktů pojmenování. Kromě toho vám také umožní snadnou navigaci ve vašem souborovém systému.

Následuje typická adresářová struktura projektu Python:

project/
?
??? package1/
?   ??? __init__.py
?   ??? module1.py
?   ??? module2.py
?
??? package2/
?   ??? __init__.py
?   ??? module3.py
?   ??? module4.py
?
??? main.py

Ve výše uvedeném příkladu je projekt kořenovým adresářem obsahujícím dva dílčí balíčky, balíček1 a balíček2 . Každý balíček má své soubory .py a jedinečný soubor init.py.

Co jsou soubory init.py?

Soubory init.py jsou důležité pro definování chování balíčku při jeho importu. Tyto soubory se spouštějí při importu jejich nadřazeného balíčku.

Soubory init.py mohou být prázdné nebo mohou obsahovat inicializační kód. Také označují Python, že se složkou by se mělo zacházet jako s balíkem.

Chcete-li importovat modul z nadřazeného adresáře, můžete použít metodu sys.path . K sys.path budete muset připojit cestu k nadřazenému adresáři .

Abychom to demonstrovali, navažme na náš předchozí příklad. Měli jsme následující adresářovou strukturu:

E:
|-- /my_project
    |-- main.py
    |-- /module_dir
        |-- my_module.py

Nyní přidáme soubor init.py do adresáře my_module . Tento soubor můžete zatím nechat prázdný. Jeho přítomnost ukazuje Pythonu, že s tímto adresářem by se mělo zacházet jako s balíkem.

Vaše adresářová struktura by nyní měla vypadat takto:

Import Pythonu z nadřazeného adresáře: Rychlý průvodce

Po přidání souboru init.py musíte provést změny v souboru main.py a dát mu pokyn, aby zacházel se složkou module_dir jako s balíčkem. Váš soubor main.py by nyní měl mít následující kód:

import sys
import os

# Get the parent directory
parent_dir = os.path.dirname(os.path.realpath(__file__))

# Add the parent directory to sys.path
sys.path.append(parent_dir)

# Import my_module from the package module_dir
import module_dir

# Call my_function from my_module
my_module.my_function()

V tomto příkladu main.py importuje balíček module_dir a poté zavolá funkci my_function() z my_module v rámci tohoto balíčku.

Všimněte si změny ve volání funkce my_function ; protože nyní zacházíme s module_dir jako s balíčkem, musíme při volání funkcí z modulů v balíčku uvést název balíčku.

Výstup bude podobný předchozímu. Jedinou změnou, kterou jsme provedli, bylo považovat module_dir za balíček se zahrnutím souboru init.py.

Import Pythonu z nadřazeného adresáře: Rychlý průvodce

Vyhledávací cesta Pythonu

Přemýšleli jste někdy, jak Python ví, kde najít moduly, které se pokoušíte importovat? Nebo jste se možná setkali s nepříjemným 'ModuleNotFoundError' a nemohli jste přijít na to proč?

V této části se s těmito záhadami vypořádáme přímo a ponoříme se do konceptu vyhledávací cesty Pythonu.

Vyhledávací cesta Pythonu, známá také jako sys.path , je malá mapa Pythonu k nalezení všech modulů, které potřebujete. Jako pilný průzkumník používá Python tuto cestu k hledání modulů ve vašem počítači, kdykoli použijete příkaz import.

Pochopení toho, jak to funguje, vám může ušetřit bolesti hlavy a pomůže vám odstraňovat problémy, když se něco pokazí, takže si pojďme projít pár základů!

1. Co je seznam sys.path v Pythonu?

Seznam sys.path je klíčovou součástí při importu modulů do adresáře. Je to seznam řetězců, které představují cestu hledání modulu.

Každý řetězec ve vyhledávání hledá moduly ( soubory *.py ) nebo balíčky (složky obsahující soubory init.py ).

Následující příklad ukazuje, jak zobrazit aktuální seznam sys.path :

import sys

for path in sys.path:
    print(path)

Po spuštění výše uvedeného kódu uvidíte výstup, jako je tento:

Import Pythonu z nadřazeného adresáře: Rychlý průvodce

Můžete také přidat nové adresáře do seznamu sys.path , aby Python našel vaše vlastní moduly.

Například:

import sys
sys.path.append('/path/to/new/module/directory')

2. Co jsou proměnné prostředí PythonPath?

Dalším způsobem, jak můžete spravovat cestu hledání modulu, je použití proměnné prostředí PYTHONPATH .

PYTHON PATH je řetězec obsahující adresářů, který je připojen k výchozímu seznamu sys.path . To znamená, že do PYTHONPATH můžete přidávat adresáře . To umožňuje Pythonu při importu hledat moduly v těchto adresářích.

Nastavení proměnné prostředí PYTHONPATH závisí na vašem operačním systému:

  • Systémy založené na Unixu (Linux, macOS) : Můžete použít příkaz export ve svém terminálu nebo přidat následující řádek do konfiguračního souboru shellu ( .bashrc , .zshrc nebo podobně):

    export PYTHONPATH="/path/to/module/directory1:/path/to/module/directory2"
  • Operační systém Windows : Přejděte do Vlastnosti systému > Proměnné prostředí a v části Uživatelské proměnné kliknutím na tlačítko Nová vytvořte novou proměnnou s názvem: „PYTHONPATH“ a hodnotou ve formě seznamu cest k adresářům oddělených středníkem (;).

    C:pathtomoduledirectory1;C:pathtomoduledirectory2
    

Jakmile je proměnná cesta nastavena, můžete spustit skript Python. Vyhledá importované moduly v těchto adresářích i výchozí moduly v sys.path .

Při organizování kódu do souborů a složek často narazíte na relativní importy a úpravy sys.path .

V další části prozkoumáme oba a uvidíme, jak zapadají do rámce pro importy Pythonu.

Importy nadřazeného adresáře

Kód můžete uspořádat do různých složek a souborů a zlepšit tak čitelnost a udržovatelnost. Import modulů z nadřazených adresářů však může být trochu složitější.

V této části probereme dva způsoby, jak toho dosáhnout:

  1. Relativní dovozy

  2. Úprava sys.path

1. Relativní dovozy

Relativní importy umožňují importovat moduly na základě jejich relativní pozice v hierarchii adresářů.

K odkazování na aktuální adresář můžete použít tečkový ( . ) zápis nebo k odkazování na nadřazený adresář zápis dvojitou tečkou ( .. ).

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

parent_directory/
?
??? module_a.py
?
??? sibling_directory/
    ??? module_b.py

Uvnitř module_b.py můžete použít relativní importy pro přístup k module_a.py :

from .. import module_a

Dvojitá tečka odkazuje na nadřazený adresář. Je důležité si uvědomit, že relativní importy fungují pouze v případě, že nadřazeným adresářem je balíček (má soubor init.py ).

2. Úprava sys.path

Moduly můžete také importovat z nadřazeného adresáře úpravou sys.path .

Před příkazem import můžete připojit cestu k nadřazenému adresáři k sys.path . Nejprve musíte importovat modul sys . Poté pomocí modulu os získáte cestu k nadřazenému adresáři.

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

project_root/
?
??? parent_directory/
?   ??? module_a.py
?
??? current_directory/
    ??? module_b.py

V module_b.py můžete připojit cestu k nadřazenému adresáři k sys.path takto:

import os
import sys

parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(parent_dir)

import module_a

Nyní Python při importu do module_b.py vyhledá module_a.py v nadřazeném adresáři .

K importu modulů z nadřazeného adresáře můžete použít přístup relativního importu nebo přístup sys.path .

Jak pracovat s moduly a balíčky

V Pythonu jsou moduly a balíčky způsobem, jak organizovat a znovu používat kód. Můžete je použít k rozdělení složitých projektů do spravovatelných částí.

Tato část pojednává o tom, jak pracovat s moduly a balíčky v . Zahrneme také klíčové pojmy, jako jsou:

  1. Jmenné prostory

  2. Proměnné a definice

  3. Výpisy o importu

1. Co jsou jmenné prostory?

Jmenné prostory v Pythonu představují způsob, jak zajistit, aby názvy proměnných, funkcí a tříd nebyly v konfliktu mezi různými moduly.

V Pythonu existují různé úrovně jmenných prostorů, například:

  • Globální jmenný prostor: Odkazuje na jmenný prostor celého modulu.

  • Místní jmenný prostor: Odkazuje na jmenný prostor v rámci funkce nebo třídy.

Název v konkrétním jmenném prostoru můžete získat zápisem namespace[name] .

2. Co jsou proměnné a definice?

Ve skriptu Pythonu můžete definovat proměnné, a třídy. Tyto definice jsou uloženy ve jmenném prostoru skriptu.

Importováním skriptu jako balíčku můžete přistupovat k jeho definicím a znovu je používat v jiných částech vašeho projektu.

Následuje příklad, jak definovat proměnnou a funkci ve stejném jmenném prostoru:

# my_variable.py
my_variable = 5

def my_function(x):
    return x + my_variable

Tento modul má proměnnou my_variable a funkci my_function .

Chcete-li spustit tento kód, můžete vytvořit nový soubor s názvem my_variable.py a vložit do něj kód, jak je uvedeno níže:

Import Pythonu z nadřazeného adresáře: Rychlý průvodce

Nyní můžete tento soubor importovat a použít jej v jiném skriptu, jak je uvedeno níže:

Import Pythonu z nadřazeného adresáře: Rychlý průvodce

Po spuštění souboru main.py získáte výstup podobný následujícímu:

Import Pythonu z nadřazeného adresáře: Rychlý průvodce

3. Co jsou prohlášení o dovozu?

Pomocí příkazu import můžete importovat soubory, moduly nebo balíčky v Pythonu

Některé běžné způsoby importu jsou:

  • import název_modulu : Tato metoda importuje modul a zpřístupní všechny jeho definice pomocí zápisu název_modulu.název_definice .

import mymodule

result = mymodule.my_function(3)
  • from module_name import some_definition : Tato metoda importuje konkrétní definici z modulu, což vám umožní použít ji přímo bez prefixu modulu.

from mymodule import my_function

result = my_function(3)
  • from module_name import * : Tato metoda importuje všechny definice z modulu, ale nedoporučuje se, protože to může vést ke konfliktům názvů.

Závěrečné myšlenky

Pochopení toho, jak importovat z nadřazeného adresáře v Pythonu, je důležité pro udržování organizované kódové základny.

Tyto znalosti vám umožňují navrhovat své projekty modulárnějším způsobem. Zvyšuje také znovupoužitelnost vašeho kódu. Strukturováním kódu do samostatných modulů a balíčků se můžete vyhnout opakování kódu a usnadnit jeho údržbu a aktualizaci.

Schopnost používat import az příkazů je nejcennější, když pracujete na větších projektech, kde jsou funkce rozděleny do různých adresářů.

Tím, že víte, jak správně upravit cestu Pythonu pro import modulů, můžete přistupovat k funkcím definovaným v jednom adresáři při práci v jiném.

Pamatujte, že klíč ke zvládnutí Pythonu – nebo jakéhokoli programovacího jazyka – spočívá v důsledné praxi a neukojitelné zvědavosti. Takže pokračujte ve zkoumání, pokračujte v experimentování a nepřestávejte vyzývat sami sebe.

S tímto rychlým průvodcem byste měli být dobře vybaveni, abyste zvládli jakékoli importní hádanky, které na vás Python vrhne. Ale nezastavujte se tady. Existuje celý vesmír Pythonových technik a triků, které čekají na objevení!


Vyriešte výzvu na analýzu dát s akcelerátorom LuckyTemplates

Vyriešte výzvu na analýzu dát s akcelerátorom LuckyTemplates

Zdokonaľte svoje zručnosti v oblasti vývoja zostáv zapojením sa do výzvy v oblasti analýzy údajov. Accelerator vám môže pomôcť stať sa super používateľom LuckyTemplates!

Spuštění součtů v LuckyTemplates pomocí DAX

Spuštění součtů v LuckyTemplates pomocí DAX

Naučte se, jak vypočítat průběžné součty v LuckyTemplates pomocí DAX. Průběžné součty vám umožní nezabřednout do žádného jednotlivého výsledku.

LuckyTemplates Dax proměnné jsou konstantní: Co to znamená?

LuckyTemplates Dax proměnné jsou konstantní: Co to znamená?

Pochopte koncept proměnných v jazyce DAX v rámci LuckyTemplates a důsledky proměnných pro způsob výpočtu vašich mír.

LuckyTemplates Sloping Chart: Prehľad

LuckyTemplates Sloping Chart: Prehľad

Získajte viac informácií o vlastnom vizuáli nazývanom graf LuckyTemplates Slope, ktorý sa používa na zobrazenie nárastu/zníženia pre jednu alebo viacero metrík.

Farebné motívy LuckyTemplates pre jednotné vizualizácie

Farebné motívy LuckyTemplates pre jednotné vizualizácie

Objavte farebné motívy v LuckyTemplates. Sú nevyhnutné, aby vaše zostavy a vizualizácie vyzerali a fungovali bez problémov.

Výpočet priemeru v LuckyTemplates: Izolácia výsledkov cez týždeň alebo cez víkend pomocou DAX

Výpočet priemeru v LuckyTemplates: Izolácia výsledkov cez týždeň alebo cez víkend pomocou DAX

Výpočet priemeru v LuckyTemplates možno vykonať mnohými spôsobmi, aby ste získali presné informácie pre vaše obchodné správy.

Motiv LuckyTemplates | Standardní motiv LuckyTemplates Desktop

Motiv LuckyTemplates | Standardní motiv LuckyTemplates Desktop

Pojďme se ponořit do standardního motivu LuckyTemplates a prohlédnout si některé funkce zabudované do samotné aplikace LuckyTemplates Desktop.

Vizuál mapy LuckyTemplates: Ako vytvoriť a pridať vlastnú legendu v LuckyTemplates

Vizuál mapy LuckyTemplates: Ako vytvoriť a pridať vlastnú legendu v LuckyTemplates

V tomto návode sa naučíte, ako vytvoriť vlastnú legendu vo vizuáli mapy LuckyTemplates, aby ste zobrazili preferované farby a segmentáciu.

Obrázek na pozadí LuckyTemplates pro sestavy pomocí PPT

Obrázek na pozadí LuckyTemplates pro sestavy pomocí PPT

Naučte se, jak nastavit obrázek na pozadí LuckyTemplates pomocí PowerPointu. Toto je jedna z mých technik při vytváření sestav LuckyTemplates.

Model a analýza rozhodnutí o obstarávaní v LuckyTemplates

Model a analýza rozhodnutí o obstarávaní v LuckyTemplates

V tomto návode sa ponoríme do analýzy obstarávania v rámci organizácie pomocou interakčnej funkcie a sily dátového modelu.