Методы проверки версии Python: от командной строки до скриптов

Раздел: Установка и настройка -> Версии и установка Python

Общие сведения о проверке версии Python

При работе с Python важно точно знать, какая версия интерпретатора используется. Это помогает избежать несовместимости библиотек, выбирать правильный синтаксис и диагностировать ошибки. Ниже рассмотрены основные способы определения версии, от простых команд в терминале до программных методов внутри скриптов.

Как быстро узнать версию Python в терминале?

Наиболее универсальный и быстрый способ - использование флага --version (сокращённо -V). В большинстве систем эта команда выводит номер версии и завершает работу.

python --version

Python какая версия (какая версия python установлена)

Если в системе установлено несколько версий, могут потребоваться уточнения:

python3 --version
py -3 --version   # Windows, Python Launcher

Цель: мгновенная проверка в командной строке без запуска интерпретатора. Используется при настройке окружения, в скриптах автоматизации и CI/CD.

Возможные проблемы: Команда может вернуть сообщение об ошибке, если Python не установлен или не добавлен в переменную среды PATH. В UNIX-подобных системах команда python может отсутствовать, тогда нужно явно указывать python3. В Windows старые версии Python (2.x) иногда перехватывают имя python.

Решение: Установить Python (если отсутствует) или использовать полный путь к исполняемому файлу. Для Windows рекомендовано использовать py --version для корректной работы с Python Launcher.

Как проверить версию внутри интерпретатора?

Запустив интерпретатор в интерактивном режиме, можно узнать версию, выполнив встроенный код:

python -c "import sys; print(sys.version)"

Или непосредственно внутри сессии:

$ python
Python 3.12.0 (default, Oct 16 2023, 12:00:00)
[GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.version)
3.12.0 (default, Oct 16 2023, 12:00:00) 
[GCC 11.2.0]

Цель: Получение дополнительной информации (дата сборки, компилятор, платформа) вместе с номером версии. Полезно при отладке нестандартных сборок.

Проблема: В некоторых контейнерах или урезанных средах вызов python -c может завершиться ошибкой, если нет модуля sys (практически невозможно).

Как получить версию в виде простой строки через module platform?

Модуль platform предоставляет функцию python_version(), возвращающую чистый номер версии без дополнительных деталей.

python -c "import platform; print(platform.python_version())"

Результат: 3.12.0

Цель: Использование в скриптах, где требуется только мажорная и минорная часть, например, для проверки совместимости с библиотеками.

Ошибка: Модуль platform встроенный, поэтому проблем с его отсутствием не возникает. Однако на очень старых версиях Python (2.3 и ниже) функция могла называться python_implementation_version.

Как программно проверить совместимость с версией через sys.version_info?

Кортеж sys.version_info содержит числовые значения major, minor, micro, releaselevel, serial. Это позволяет легко сравнивать версии.

python -c "import sys; v = sys.version_info; print(f'Major: {v.major}, Minor: {v.minor}, Micro: {v.micro}')"

Вывод: Major: 3, Minor: 12, Micro: 0

Цель: Написание кода, адаптирующегося под разные версии Python (например, использование match только в 3.10+).

Проблема: Свойство .major и .minor доступно с Python 2.7? На самом деле с Python 2.6. В Python 2.7 и старше всё корректно.

Как включить вывод версии в собственную программу?

В любом скрипте можно добавить строку, печатающую версию при запуске с флагом --version.

#!/usr/bin/env python3
import sys, argparse

parser = argparse.ArgumentParser()
parser.add_argument('--version', action='version', version=sys.version)
args = parser.parse_args()

Теперь вызов myscript.py --version выведет версию интерпретатора.

Цель: Разработка утилит, где требуется стандартный интерфейс вывода версии.

Как определить, какой именно Python вызывается по умолчанию?

Команда which python (Linux/macOS) или where python (Windows) покажет путь к исполняемому файлу, после чего его версию можно проверить вызовом с этим путём.

which python   # /usr/bin/python
/usr/bin/python --version

Цель: Диагностика, когда несколько интерпретаторов и нужно понять, на какой из них указывает общая команда.

Ошибка: Команда which может не найти Python, если он установлен через Microsoft Store или другой менеджер с изолированными путями. В Windows лучше использовать where python в командной строке (cmd), а не PowerShell.

Как в Windows проверить версию через Python Launcher?

Python Launcher (утилита py) предоставляет гибкий способ выбора версии. Простая команда py --version покажет версию по умолчанию. Можно также указать конкретную мажорную версию: py -3.11 --version.

py --version
py -3 --version
py -3.11 --version

Цель: Работа с несколькими версиями Python на одной машине без путаницы с PATH.

Проблема: Launcher не установлен автоматически в некоторых старых установщиках. Необходимо переустановить Python, отметив опцию «Add Python to PATH» и «Install launcher for all users».

Как узнать версию в виртуальном окружении?

После активации виртуального окружения (venv) команда python --version покажет версию, с которой это окружение было создано. Версия не меняется при активации.

python -m venv myenv
source myenv/bin/activate   # Linux/macOS
# myenv\Scripts\activate     # Windows
python --version

Цель: Убедиться, что окружение использует нужную версию Python (часто требуется для совместимости зависимостей).

Ошибка: Если окружение создано с Python 3.10, а в системе установлена 3.12, команда python внутри окружения всё равно укажет на 3.10 (исполняемый файл сохранён при создании). При активации нельзя изменить версию.

Расширенные примеры проверки версии Python

Получение версии через subprocess из другого скрипта

Иногда нужно проверить версию интерпретатора, который будет выполнять текущий скрипт, изнутри другого процесса.

Пример
import subprocess, sys
result = subprocess.run([sys.executable, '--version'], capture_output=True, text=True)
print('Версия из subprocess:', result.stdout.strip())
Версия из subprocess: Python 3.12.0

Пояснение: sys.executable возвращает путь к текущему интерпретатору, что гарантирует проверку именно его версии.

Сравнение версий с помощью packaging.version

В пакетах часто требуется минимальная версия. Модуль packaging.version позволяет корректно сравнивать строки версий.

Пример
from packaging.version import Version, parse

min_ver = parse('3.8')
current = Version('3.12.0')
if current >= min_ver:
    print(f'Текущая версия {current} удовлетворяет минимальной {min_ver}')
Текущая версия 3.12.0 удовлетворяет минимальной 3.8

Использование sys.version_info для проверки мажорной версии

Часто нужно узнать только major.minor без micro или других полей.

Пример
import sys
min_version = (3, 10)
current = (sys.version_info.major, sys.version_info.minor)
if current >= min_version:
    print('Версия подходит для использования match-выражений')
Версия подходит для использования match-выражений

Определение версии выполняемого скрипта при запуске с разными интерпретаторами

Можно вывести версию вместе с путём к интерпретатору для отладки.

Пример
import sys, platform
print(f'Исполняемый файл: {sys.executable}')
print(f'Версия: {platform.python_version()}')
print(f'Платформа: {sys.platform}')
Исполняемый файл: /usr/bin/python3.12
Версия: 3.12.0
Платформа: linux

Проверка версии в Docker-контейнере

Внутри контейнера можно выполнить команду через Dockerfile или прогон тестов.

Пример
# Dockerfile
FROM python:3.11-slim
RUN python --version && python -c "import sys; print(sys.version_info)"

Вывод при сборке:

Python 3.11.9
sys.version_info(major=3, minor=11, micro=9, releaselevel='final', serial=0)

Получение версии из метаданных модуля (если доступно)

Для установленных пакетов иногда нужно узнать версию Python, для которой они собраны. Модуль sys.implementation содержит имя (CPython, PyPy и т.д.).

Пример
import sys
print(f'Реализация: {sys.implementation.name}')
if hasattr(sys, 'pypy_version_info'):
    print('PyPy версия:', sys.pypy_version_info)
Реализация: cpython

Использование функции python_version() в многострочном скрипте с условиями

Пример скрипта, который ведёт себя по-разному в Python 2 и 3.

Пример
import sys
if sys.version_info.major == 2:
    print('Работает в Python 2')
    # some Python 2 code
else:
    print(f'Работает в Python {sys.version_info.major}')
    # Python 3 code
Работает в Python 3

Вывод номера версии без точки после micro (только major.minor)

Можно извлечь major.minor для отображения в интерфейсе.

Пример
import sys
ver = f'{sys.version_info.major}.{sys.version_info.minor}'
print(f'Версия: {ver}')
Версия: 3.12

Все примеры предназначены для использования в скриптах, автоматизированных тестах и при отладке.

Какая версия Python установлена - comments

En
Python какая версия (python)