При импорте модуля/пакета, Python последовательно просматривает следующие места:
sys.path:  Список каталогов, где Python ищет модули. Включает:
      PYTHONPATH./usr/lib/python3.x/site-packages).Python просматривает каждый каталог в sys.path в порядке его появления. Если модуль найден, он загружается и выполняется.  Если модуль не найден нигде, возникает исключение ModuleNotFoundError (или ImportError в старых версиях Python).
Механизм поиска модулей и пакетов в Python – это процесс, с помощью которого интерпретатор Python находит и загружает необходимые файлы для выполнения import операторов. Этот процесс происходит в определенной последовательности, позволяя Python находить модули, как из стандартной библиотеки, так и из сторонних источников.
Порядок поиска модулей:
sys.modules: Python сначала проверяет словарь sys.modules. Этот словарь содержит уже загруженные модули. Если модуль был импортирован ранее, Python использует его непосредственно из sys.modules, избегая повторной загрузки с диска. Это оптимизирует производительность.sys.path: Если модуля нет в sys.modules, Python переходит к поиску в списке путей, содержащемся в sys.path. sys.path представляет собой список строк, представляющих каталоги. Python последовательно просматривает каждый каталог в sys.path, пытаясь найти файл модуля.Содержимое sys.path:
sys.path обычно инициализируется следующим образом:
python my_script.py), то каталог, в котором находится my_script.py, добавляется в sys.path. Если Python запущен в интерактивном режиме, этот каталог может быть пустым.PYTHONPATH: Содержимое переменной окружения PYTHONPATH (если она установлена). PYTHONPATH – это список каталогов, разделенных разделителем (например, : в Unix-подобных системах и ; в Windows)./usr/lib/python3.x/). Этот путь определяется во время установки Python.Поиск файлов модулей:
При поиске модуля my_module, Python ищет файлы со следующими расширениями и в следующем порядке:
my_module.py: Стандартный исходный файл Python.my_module.pyc или my_module.pyo: Скомпилированные байт-коды (.pyc создается автоматически, .pyo создается с опцией -O или -OO).my_module.so, my_module.pyd, и т.д.: Разделяемые библиотеки (расширения для C, C++ и других языков).my_module является пакетом (каталогом), то Python ищет файл __init__.py внутри этого каталога.  Наличие __init__.py сигнализирует Python, что данный каталог следует рассматривать как пакет.Работа с пакетами:
Пакет – это способ организации связанных модулей в иерархическую структуру каталогов.  Каждый подкаталог в пакете также может быть пакетом, если он содержит файл __init__.py.
Например, для импорта модуля module_a из пакета package_x, структура каталогов может быть следующей:
  package_x/
      __init__.py
      module_a.py
  
  В Python коде:
import package_x.module_a
Важно:
sys.path имеет значение. Python ищет модули в том порядке, в котором каталоги перечислены в sys.path.Этот механизм обеспечивает гибкость и позволяет Python легко находить и использовать модули из различных источников, что является одной из ключевых особенностей языка.