Как Python ищет модули при импорте

При импортировании модулей интерпретатор Python ищет их в директориях и архивах, список которых доступен как для чтения, так и для модификации в виде переменной path встроенного модуля sys. По умолчанию sys.path состоит из директории с запускаемым скриптом, содержимого переменной окружения PYTHONPATH и стандартного расположения модулей, специфичного для конкретной платформы и интерпретатора.

Oct. 12, 2023, Источник

Процесс поиска и загрузки модулей при импорте осуществляется следующим образом:

1. Поиск в текущем каталоге: Сначала ищет модуль в текущем каталоге, из которого запускается скрипт.
2. Поиск в каталоге стандартных библиотек: Если модуль не найден в текущем каталоге, Python проверяет каталоги, указанные в переменной окружения `PYTHONPATH`, если такая переменная установлена.
3. Поиск в установленных пакетах: Если модуль не найден в `PYTHONPATH`, проверяет стандартные каталоги, где установлены модули и библиотеки Python (например, `lib/site-packages` на Windows или `/usr/local/lib/pythonX.X/dist-packages` на Unix-подобных системах).

Этот процесс поиска управляется списком путей, который хранится в переменной `sys.path`. Порядок элементов в `sys.path` определяет порядок поиска модулей.

Пример работы с `sys.path`:

```python
import sys
print(sys.path)
```

Вывод покажет все пути, где Python будет искать модули. Мы можем вручную добавить путь к этому списку, если хотим, чтобы Python искал модули в дополнительном месте:

```python
import sys
sys.path.append('/path/to/my/modules')
```

Пример импорта модуля:

```python
# Файл my_module.py в текущем каталоге
def hello():
    print("Hello, world!")

# Файл main.py в том же каталоге
import my_module
my_module.hello()  # Выведет: Hello, world!
```

Если `my_module.py` не будет найден в текущем каталоге, Python начнет проверять другие пути в `sys.path` в указанном порядке, пока не найдет нужный модуль или не завершится с ошибкой `ModuleNotFoundError`.

May 22, 2024, easyoffer

Примеры ответов: