Как 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