← Назад к вопросам
Как операционная система находит Python?
1.0 Junior🔥 91 комментариев
#DevOps и инфраструктура#Python Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как операционная система находит Python?
Это фундаментальный вопрос о том, как работает командная строка, шебанги и PATH переменная. Рассмотрю детально.
1. Переменная окружения PATH
ОС ищет программы в папках, перечисленных в переменной PATH:
# Посмотри содержимое PATH
echo $PATH
# Результат: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
# Это означает:
# - Сначала проверить /usr/local/bin
# - Потом /usr/bin
# - Потом /bin
# И так далее...
# Где находится python?
which python
# /usr/bin/python
# Где находится python3?
which python3
# /usr/local/bin/python3
Алгоритм поиска:
- ОС берёт команду
python - Проходит по каждой папке в PATH
- Ищет файл с именем
python - Когда находит — запускает его
- Если не находит нигде — выдаёт "command not found"
2. Проверка версий Python
# На одной машине может быть несколько версий Python
ls /usr/bin/python*
# /usr/bin/python
# /usr/bin/python2
# /usr/bin/python3
# /usr/bin/python3.8
# /usr/bin/python3.9
# /usr/bin/python3.11
# Какая версия используется по умолчанию?
python --version
# Python 3.9.7
# Это символическая ссылка
ls -la /usr/bin/python
# /usr/bin/python -> python3
ls -la /usr/bin/python3
# /usr/bin/python3 -> python3.11
3. Shebang (#!) для скриптов
Верхняя строка скрипта указывает, какой интерпретатор использовать:
#!/usr/bin/env python3
# ^ Это называется shebang или hashbang
print("Hello, World!")
Как это работает:
# Запуск скрипта
./script.py
# ОС смотрит первую строку: #!/usr/bin/env python3
# Находит python3 через command \`env\`
# Запускает его с аргументом script.py
# Эквивалентно:
python3 ./script.py
4. Команда `env` для поиска программ
# env ищет программу в PATH
env python3 --version
# Python 3.11.0
# Это надежнее, чем hardcode пути:
# ❌ #!/usr/bin/python3 (может не существовать на другой ОС)
# ✅ #!/usr/bin/env python3 (найдет python3 где угодно)
# env также может задать переменные окружения
env PYTHONUNBUFFERED=1 python script.py
5. Поиск модулей Python (sys.path)
Опосредственно, когда Python запущен, он ищет модули в определённых местах:
import sys
print(sys.path)
# [\n /home/user/project,
# /usr/lib/python3.11,
# /usr/lib/python3.11/lib-dynload,
# /usr/local/lib/python3.11/site-packages,
# /usr/lib/python3/dist-packages
# ]
# PYTHONPATH переменная окружения
echo $PYTHONPATH
# (обычно пусто)
# Но можешь добавить:
export PYTHONPATH=/home/user/my_modules:$PYTHONPATH
python script.py
6. Virtual Environment (venv)
Изолированная среда с отдельным Python:
# Создание venv
python3 -m venv venv
# Активация
source venv/bin/activate
# (На Windows: venv\\Scripts\\activate)
# Что произошло?
echo $PATH
# /home/user/project/venv/bin:/usr/bin:...
# ^ venv/bin в начале PATH
# Теперь который python используется?
which python
# /home/user/project/venv/bin/python
# ^ Python из venv, не системный!
# Это возможно, потому что venv содержит копию Python:
ls venv/bin/
# python -> python3.11
7. Путь поиска на разных ОС
Linux/macOS:
echo $PATH
# /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
# Где обычно находится Python
which python3
# /usr/bin/python3 или /usr/local/bin/python3
Windows:
echo %PATH%
REM C:\Python311;C:\Users\User\AppData\Local\Programs\Python\Python311\Scripts;...
where python
REM C:\Users\User\AppData\Local\Programs\Python\Python311\python.exe
8. Установка Python в PATH
Когда устанавливаешь Python из исходников:
# Загрузи Python
wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz
tar xzf Python-3.11.0.tgz
cd Python-3.11.0
# Компилируй
./configure --prefix=/usr/local
make
make install
# Результат: Python установлен в /usr/local/bin/python3
# /usr/local/bin обычно в PATH, поэтому python3 найдётся
which python3
# /usr/local/bin/python3
9. Проблема: "python: command not found"
# Проблема 1: Python не установлен
which python3
# (пусто)
# Решение: Установить Python
sudo apt install python3 # Linux
brew install python3 # macOS
# Проблема 2: Python есть, но не в PATH
ls /opt/python3.11/bin/python3
# Существует, но не в PATH
# Решение: Добавить в PATH
export PATH=/opt/python3.11/bin:$PATH
python3 --version
# Теперь работает
# Или создать символическую ссылку
sudo ln -s /opt/python3.11/bin/python3 /usr/local/bin/python3
10. Скрипт: поиск всех установленных Python
#!/bin/bash
# Найти все версии Python в системе
echo "Python в PATH:"
which python python2 python3 2>/dev/null || echo "None"
echo "\nВсе Python в /usr/bin:"
ls -la /usr/bin/python* 2>/dev/null || echo "None"
echo "\nВсе Python в /usr/local/bin:"
ls -la /usr/local/bin/python* 2>/dev/null || echo "None"
echo "\nВсе Python в /opt:"
find /opt -name "python*" -type f 2>/dev/null || echo "None"
echo "\nPYTHONPATH:"
echo $PYTHONPATH
11. Используемая версия при запуске
# script.py
import sys
print(f"Python executable: {sys.executable}")
print(f"Python version: {sys.version}")
print(f"Python prefix: {sys.prefix}")
# Запуск
python3 script.py
# Python executable: /usr/bin/python3
# Python version: 3.11.0 ...
# Python prefix: /usr
Практический пример: Различные способы запуска
# 1. С явным путём
/usr/bin/python3 script.py
# 2. Через env (рекомендуется)
/usr/bin/env python3 script.py
# 3. Если script.py имеет shebang и executable права
chmod +x script.py
./script.py
# Использует интерпретатор из shebang
# 4. Из venv
/home/user/project/venv/bin/python script.py
# 5. Если venv активирован
source venv/bin/activate
python script.py
# Использует python из venv
Чек-лист понимания
- Знаю, где находится Python:
which python3 - Понимаю PATH и как ОС ищет программы
- Знаю различие между python, python2, python3
- Могу использовать shebang в скриптах
- Знаю про venv и изоляцию окружений
- Понимаю sys.path и где Python ищет модули
- Могу добавить папку в PATH
- Знаю про env для поиска программ
- Могу отладить "command not found" проблемы
ОС не "находит" Python волшебным образом. Она просто следует простому алгоритму поиска через PATH переменную, которая определяет, где искать программы.