Імпорт Python із батьківського каталогу: короткий посібник

Ви коли-небудь опинялися по коліно в файлах Python, намагаючись імпортувати модуль із батьківського каталогу? Якщо так, то ви в хорошій компанії. Система імпорту Python іноді може здаватися звивистим лабіринтом, але не хвилюйтеся, ми тут, щоб допомогти вам зорієнтуватися!

Щоб імпортувати з батьківського каталогу в Python, ви можете використовувати модуль sys . Вставивши потрібний каталог у список sys.path, ви надаєте інтерпретатору розташування потрібного модуля. Після зміни sys.path ви можете імпортувати цільовий модуль за допомогою стандартного оператора імпорту.

Імпорт Python із батьківського каталогу: короткий посібник

У цій статті ми розглянемо, як можна імпортувати з батьківських каталогів у Python. Крім того, ми розглянемо конкретні випадки використання імпорту, які допоможуть вам краще зрозуміти базову структуру каталогів.

Давайте потрапимо в це!

Зміст

Як імпортувати в Python

Ми збираємося відразу перейти до сьогоднішньої теми: імпортування в Python. Ті прості рядки коду на початку ваших сценаріїв Python, які часто починаються з import або from ? Це ваш квиток до використання потужних бібліотек і модулів Python.

У цьому розділі ми розглянемо код для імпорту з батьківського каталогу в Python. Ми також розглянемо можливі помилки, які можуть виникнути під час імпорту модулів із батьківського каталогу.

Що таке система імпорту Python?

Система імпорту Python забезпечує ефективне повторне використання та організацію коду. Це полегшує вам підтримку складних проектів.

Щоб імпортувати модуль або пакет у Python, ви можете скористатися оператором import . Модулі поширюються у вигляді пакетів, які є каталогами з набором файлів Python.

Щоб імпортувати модуль із батьківського каталогу, ви можете використовувати модуль sys.path , щоб додати батьківський каталог до шляху Python. Після додавання батьківського каталогу ви можете імпортувати модуль за допомогою оператора import .

Демонстрація імпортування з батьківського каталогу

Щоб наочно продемонструвати імпортування з батьківського каталогу, розглянемо ряд кроків, які допоможуть вам зрозуміти весь процес.

1. Створення необхідних каталогів і файлів

Спочатку відкрийте файловий провідник і перейдіть до потрібного локального диска. Я використовую свій локальний диск E, тому я створю новий каталог під назвою my_project .

Усередині my_project створіть інший каталог під назвою module_dir .

Отже, тепер ви повинні мати:

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

2. Додавання файлів Python

Далі створіть новий файл .py під назвою main.py у каталозі my_project .

Після цього створіть інший файл Python під назвою my_module.py у module_dir .

Тепер ваша структура має виглядати так:

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

Якщо ви використовуєте Visual Studio Code , структура вашого каталогу має виглядати так:

Імпорт Python із батьківського каталогу: короткий посібник

3. Редагування файлів Python

Відкрийте my_module.py і додайте такий код:

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

Потім збережіть і закрийте файл.

Тепер відкрийте main.py і додайте наступний код:

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()

У цьому сценарії ми спочатку визначаємо розташування каталогу на один рівень вище від сценарію, який ми запускаємо (це батьківський каталог). Потім ми повідомляємо Python також шукати цю батьківську папку, коли йому потрібно імпортувати модулі.

Після цього ми імпортуємо модуль під назвою my_module , який знаходиться всередині каталогу під назвою module_dir, розташованого в цьому батьківському каталозі. Нарешті, ми викликаємо функцію з назвою my_function з my_module .

Після додавання наведеного вище коду збережіть і закрийте файл.

4. Запуск коду

Щоб запустити цей код, відкрийте термінал потрібного редактора коду та запустіть файл main.py. Якщо ви використовуєте Visual Studio Code, результат має виглядати так:

Імпорт Python із батьківського каталогу: короткий посібник

Main.py імпортує функцію з my_module.py , як показано на зображенні вище.

У цьому прикладі детально показано, як працює файлова система та імпорт із батьківського каталогу в Python.

Як обробити ImportError і ModuleNotFoundError у Python

Python викличе виняток ImportError , якщо модуль, який ви намагаєтеся імпортувати, не знайдено під час процесу імпорту.

ImportError є підкласом винятку ModuleNotFoundError . Він виникає, коли імпортований модуль не існує або не може бути завантажений.

Нижче наведено приклади сценаріїв, коли це може статися:

  • Модуль або пакет відсутній у sys.path .

  • Назва модуля чи пакета написана з помилкою або не існує.

  • Виникла проблема з кодом модуля, через яку він не імпортується належним чином.

У разі виникнення цих помилок ви можете скористатися такими рішеннями:

  • Подвійна перевірка написання та існування модуля або пакета.

  • Додавання необхідного каталогу до sys.path за допомогою append() або insert() .

  • Виправлення будь-яких проблем у коді модуля, які можуть перешкоджати його імпорту.

Щоб дізнатися більше про обробку помилок у Python, перегляньте таке відео:

Зрозумівши, як працює імпорт у Python, також важливо трохи ознайомитися зі структурою каталогів Python.

Структура каталогу та імпорт йдуть рука об руку, оскільки імпорт вимагає розуміння структури каталогу, тому давайте розглянемо це в наступному розділі.

Структура каталогу Python

Розуміння структури каталогів Python — це більше, ніж просто знання того, куди розмістити ваші сценарії або де знайти бібліотеку, яку ви щойно встановили.

Це як мати чистий, добре організований стіл: ви точно знатимете, де що знаходиться, і ваша продуктивність різко зросте, тому давайте розглянемо основи в цьому розділі.

Структура пакета

Структура каталогів проекту Python є важливою для правильної організації. Якщо ви правильно структуруєте свій пакет, це допоможе мінімізувати ймовірність конфліктів імен. Крім того, це також дозволить вам легко переміщатися у вашій файловій системі.

Нижче наведено типову структуру каталогу проекту Python:

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

У наведеному вище прикладі project — це кореневий каталог, що містить два підпакети, package1 і package2 . Кожен пакет має свої файли .py та унікальний файл init.py.

Що таке файли init.py?

Файли init.py важливі для визначення поведінки пакета під час його імпорту. Ці файли виконуються, коли імпортується їхній батьківський пакет.

Файли init.py можуть бути порожніми або містити код ініціалізації. Вони також вказують Python, що папку слід розглядати як пакет.

Щоб імпортувати модуль із батьківського каталогу, можна використати метод sys.path . Вам потрібно буде додати шлях батьківського каталогу до sys.path .

Щоб продемонструвати це, розглянемо наш попередній приклад. У нас була така структура каталогу:

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

Тепер давайте додамо файл init.py до каталогу my_module . Ви можете поки що залишити цей файл порожнім. Його наявність вказує Python, що цей каталог слід розглядати як пакет.

Тепер ваша структура каталогу має виглядати так:

Імпорт Python із батьківського каталогу: короткий посібник

Після додавання файлу init.py ви повинні внести зміни у свій файл main.py , щоб наказати йому розглядати папку module_dir як пакет. Тепер ваш файл main.py має містити такий код:

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()

У цьому прикладі main.py імпортує пакет module_dir , а потім викликає функцію my_function() з my_module у цьому пакеті.

Зверніть увагу на зміну виклику my_function ; оскільки зараз ми розглядаємо module_dir як пакет, ми повинні включити назву пакета під час виклику функцій із модулів у пакеті.

Вихід буде схожий на попередній. Єдина зміна, яку ми внесли, — розглядати module_dir як пакет із включенням файлу init.py.

Імпорт Python із батьківського каталогу: короткий посібник

Шлях пошуку Python

Ви коли-небудь замислювалися, як Python знає, де знайти модулі, які ви намагаєтеся імпортувати? Або, можливо, ви зіткнулися з неприємною помилкою «ModuleNotFoundError» і не можете зрозуміти, чому?

У цьому розділі ми збираємося безпосередньо розкрити ці таємниці та заглибитись у концепцію шляху пошуку Python.

Шлях пошуку Python, також відомий як sys.path , є маленькою дорожньою картою Python для пошуку всіх необхідних модулів. Як старанний розвідник, Python використовує цей шлях, щоб шукати модулі на вашому комп’ютері кожного разу, коли ви використовуєте оператор import.

Розуміння того, як це працює, може врятувати вас від головного болю та допомогти усунути неполадки, коли щось піде не так, тож давайте розглянемо деякі основи!

1. Що таке список sys.path у Python?

Список sys.path є важливим компонентом під час імпорту модулів у каталог. Це список рядків, який представляє шлях пошуку модуля.

Кожен рядок шукає модулі ( файли *.py ) або пакети (папки, що містять файли init.py ).

У наступному прикладі показано, як переглянути поточний список sys.path :

import sys

for path in sys.path:
    print(path)

Після виконання наведеного вище коду ви побачите такий результат:

Імпорт Python із батьківського каталогу: короткий посібник

Ви також можете додати нові каталоги до списку sys.path , щоб Python знаходив ваші власні модулі.

Наприклад:

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

2. Що таке змінні середовища PythonPath?

Ще один спосіб керування шляхом пошуку модуля — це використання змінної середовища PYTHONPATH .

PYTHON PATH — це рядок, що містить каталоги, які додаються до списку за замовчуванням sys.path . Це означає, що ви можете додавати каталоги до PYTHONPATH. Це дозволяє Python шукати модулі в цих каталогах під час імпорту.

Налаштування змінної середовища PYTHONPATH залежить від вашої операційної системи:

  • Системи на основі Unix (Linux, macOS) : Ви можете скористатися командою експорту у своєму терміналі або додати такий рядок до файлу конфігурації оболонки ( .bashrc , .zshrc або подібний):

    export PYTHONPATH="/path/to/module/directory1:/path/to/module/directory2"
  • ОС Windows : перейдіть до «Властивості системи » > « Змінні середовища» та в розділі « Змінні користувача» натисніть «Створити», щоб створити нову змінну з назвою «PYTHONPATH» і значенням у вигляді списку шляхів до каталогу, розділених крапкою з комою (;).

    C:pathtomoduledirectory1;C:pathtomoduledirectory2
    

Після встановлення змінної шляху ви можете запустити свій сценарій Python. Він шукатиме імпортовані модулі в цих каталогах, а також модулі за замовчуванням у sys.path .

Упорядковуючи свій код у файли та папки, ви часто стикаєтеся з відносними імпортами та коригуванням sys.path .

У наступному розділі ми вивчимо обидва й побачимо, як вони вписуються в структуру для імпорту Python.

Імпорт батьківського каталогу

Ви можете організувати код у різні папки та файли, щоб покращити читабельність і зручність обслуговування. Однак імпортувати модулі з батьківських каталогів може бути дещо складно.

У цьому розділі ми обговоримо два підходи до досягнення цього:

  1. Відносний імпорт

  2. Налаштування sys.path

1. Відносний імпорт

Відносний імпорт дозволяє імпортувати модулі на основі їх відносної позиції в ієрархії каталогу.

Ви можете використовувати крапку ( . ) для посилання на поточний каталог або подвійну крапку ( .. ) для посилання на батьківський каталог.

Припустімо, у вас є така структура каталогу:

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

Усередині module_b.py ви можете використовувати відносний імпорт для доступу до module_a.py :

from .. import module_a

Подвійна крапка вказує на батьківський каталог. Важливо зазначити, що відносний імпорт працює, лише якщо батьківський каталог є пакетом (має файл init.py ).

2. Налаштування sys.path

Ви також можете імпортувати модулі з батьківського каталогу, змінивши sys.path .

Перед оператором імпорту ви можете додати шлях батьківського каталогу до sys.path . Спочатку вам потрібно імпортувати модуль sys . Потім ви використовуєте модуль os , щоб отримати шлях до батьківського каталогу.

Припустімо, у вас є така структура каталогу:

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

У module_b.py ви можете додати шлях батьківського каталогу до sys.path так:

import os
import sys

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

import module_a

Тепер Python шукатиме module_a.py у батьківському каталозі під час імпорту в module_b.py .

Щоб імпортувати модулі з батьківського каталогу, можна використовувати або підхід відносного імпорту, або підхід sys.path .

Як працювати з модулями та пакетами

У Python модулі та пакунки є способом організації та повторного використання коду. Ви можете використовувати їх, щоб розділити складні проекти на керовані частини.

У цьому розділі буде обговорено, як працювати з модулями та пакетами в . Ми також включимо ключові поняття, такі як:

  1. Простори імен

  2. Змінні та визначення

  3. Виписки про імпорт

1. Що таке простори імен?

Простори імен у Python — це спосіб гарантувати, що імена змінних, функцій і класів не конфліктують між різними модулями.

У Python існують різні рівні просторів імен, наприклад:

  • Глобальний простір імен: відноситься до простору імен усього модуля.

  • Локальний простір імен: посилається на простір імен у функції або класі.

Ви можете отримати ім’я в певному просторі імен за допомогою нотації namespace[name] .

2. Що таке змінні та визначення?

У сценарії Python ви можете визначати змінні, і класи. Ці визначення зберігаються в просторі імен сценарію.

Імпортувавши сценарій як пакет, ви можете отримати доступ і повторно використовувати його визначення в інших частинах вашого проекту.

Нижче наведено приклад того, як визначити змінну та функцію в одному просторі імен:

# my_variable.py
my_variable = 5

def my_function(x):
    return x + my_variable

Цей модуль має змінну my_variable і функцію my_function .

Щоб запустити цей код, ви можете створити новий файл із назвою my_variable.py і розмістити туди код, як показано нижче:

Імпорт Python із батьківського каталогу: короткий посібник

Тепер ви можете імпортувати цей файл і використовувати його в іншому сценарії, як показано нижче:

Імпорт Python із батьківського каталогу: короткий посібник

Після запуску файлу main.py ви отримаєте результат, подібний до такого:

Імпорт Python із батьківського каталогу: короткий посібник

3. Що таке звіти про імпорт?

Ви можете імпортувати файли, модулі чи пакети в Python за допомогою оператора import

Ось деякі поширені методи імпорту:

  • import module_name : цей метод імпортує модуль, роблячи всі його визначення доступними за допомогою нотації module_name.definition_name .

import mymodule

result = mymodule.my_function(3)
  • from module_name import some_definition : цей метод імпортує конкретне визначення з модуля, що дозволяє використовувати його безпосередньо без префікса модуля.

from mymodule import my_function

result = my_function(3)
  • from module_name import * : Цей метод імпортує всі визначення з модуля, але не рекомендується, оскільки це може призвести до конфліктів імен.

Заключні думки

Розуміння того, як імпортувати з батьківського каталогу в Python, є важливим для підтримки організованої кодової бази.

Ці знання дозволяють розробляти ваші проекти більш модульним способом. Це також підвищує можливість повторного використання вашого коду. Розділивши свій код на окремі модулі та пакети, ви можете уникнути повторення коду та спростити його підтримку та оновлення.

Уміння використовувати оператори імпорту та з найбільш цінне, коли ви працюєте над великими проектами, де функції розподілені між різними каталогами.

Знаючи, як правильно налаштувати шлях Python до імпорту модулів, ви можете отримати доступ до функцій, визначених в одному каталозі, працюючи в іншому.

Пам’ятайте, що ключ до оволодіння Python — або будь-якою іншою мовою програмування — полягає в послідовній практиці та невгамовній цікавості. Тож продовжуйте досліджувати, експериме��тувати та кидати собі виклик.

З цим коротким посібником ви маєте бути добре підготовлені для вирішення будь-яких головоломок імпорту, які кидає вам Python. Але не зупиняйтеся на цьому. Існує цілий всесвіт прийомів і прийомів Python, які чекають свого відкриття!


Вирішіть задачу аналізу даних за допомогою прискорювача LuckyTemplates

Вирішіть задачу аналізу даних за допомогою прискорювача LuckyTemplates

Відточіть свої навички розробки звітів, приєднавшись до змагання з аналізу даних. Прискорювач може допомогти вам стати суперкористувачем LuckyTemplates!

Підсумки в LuckyTemplates за допомогою DAX

Підсумки в LuckyTemplates за допомогою DAX

Дізнайтеся, як обчислювати поточні підсумки в LuckyTemplates за допомогою DAX. Поточні підсумки дозволяють вам не потрапити в окремий результат.

Змінні LuckyTemplates Dax постійні: що це означає?

Змінні LuckyTemplates Dax постійні: що це означає?

Зрозумійте концепцію змінних у DAX у LuckyTemplates і значення змінних для обчислення показників.

Діаграма нахилу LuckyTemplates: огляд

Діаграма нахилу LuckyTemplates: огляд

Дізнайтеся більше про настроюваний візуал під назвою LuckyTemplates Slope chart, який використовується для показу зростання/зменшення для одного чи кількох показників.

Колірні теми LuckyTemplates для однорідної візуалізації

Колірні теми LuckyTemplates для однорідної візуалізації

Відкрийте для себе кольорові теми в LuckyTemplates. Це необхідно для того, щоб ваші звіти та візуалізації виглядали та працювали без проблем.

Обчислення середнього значення в LuckyTemplates: виділення результатів у будні чи вихідні за допомогою DAX

Обчислення середнього значення в LuckyTemplates: виділення результатів у будні чи вихідні за допомогою DAX

Розрахувати середнє значення в LuckyTemplates можна кількома способами, щоб отримати точну інформацію для ваших бізнес-звітів.

Шаблони LuckyTemplates | Стандартне оформлення робочого столу LuckyTemplates

Шаблони LuckyTemplates | Стандартне оформлення робочого столу LuckyTemplates

Давайте заглибимося в стандартну тематику LuckyTemplates і розглянемо деякі функції, вбудовані в саму програму LuckyTemplates Desktop.

Візуальна карта LuckyTemplates: як створити та додати спеціальну легенду в LuckyTemplates

Візуальна карта LuckyTemplates: як створити та додати спеціальну легенду в LuckyTemplates

У цьому підручнику ви дізнаєтесь, як створити спеціальну легенду у візуальній карті LuckyTemplates для відображення бажаних кольорів і сегментації.

Фонове зображення LuckyTemplates для звітів із використанням PPT

Фонове зображення LuckyTemplates для звітів із використанням PPT

Дізнайтеся, як налаштувати фонове зображення LuckyTemplates за допомогою PowerPoint. Це одна з моїх технік створення звітів LuckyTemplates.

Модель та аналіз рішень щодо закупівель у LuckyTemplates

Модель та аналіз рішень щодо закупівель у LuckyTemplates

У цьому підручнику ми збираємося зануритися в аналіз закупівель в організації, використовуючи функцію взаємодії та потужність моделі даних.