Как узнать установленную версию Python в различных средах

Раздел: Администрирование -> Установка и версии

Способы получения версии Python

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

Наиболее распространённый способ - выполнить команду python --version или python -V. Она выводит версию интерпретатора, установленного по умолчанию.

python --version

Get python version (получение версии python)

Python 3.11.5

На системах, где сосуществуют Python 2 и Python 3, может потребоваться явно указать python3:

python3 --version
Python 3.9.10

Типичная ошибка: python: command not found. Решение - установить Python или добавить его в переменную PATH. На Windows используйте py --version.

Как определить версию внутри Python-скрипта для программной проверки?

Импортируйте модули sys или platform. Первый возвращает строку с полной информацией, второй - только номер версии.

import sys
print(sys.version)
print(sys.version_info)

import platform
print(platform.python_version())
3.11.5 (main, Sep 11 2023, 08:19:27)
sys.version_info(major=3, minor=11, micro=5, releaselevel='final', serial=0)
3.11.5

Возможная путаница: sys.version содержит компилятор и дату сборки, что избыточно для сравнения. Используйте sys.version_info[:3] для численного сравнения.

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

Добавьте проверку в начале скрипта и завершите выполнение, если версия ниже требуемой.

import sys
required_version = (3, 8)
if sys.version_info[:2] < required_version:
    sys.exit("Требуется Python {}.{} или новее".format(*required_version))

Такой подход часто используется в утилитах и библиотеках, чтобы избежать несовместимых вызовов.

Ошибка: неверное сравнение строк. Всегда сравнивайте кортежи целых чисел, а не строки вида '3.11.5'.

Как получить версию Python в Makefile или shell-скрипте для условного выполнения?

Используйте захват вывода команды python --version и обработку с помощью утилит cut, awk или grep.

VERSION=$(python -c "import sys; print('%d.%d' % sys.version_info[:2])")
echo "Python version is $VERSION"

Или в Makefile: PYTHON_VERSION := $(shell python3 -c 'import sys;print(sys.version_info[0])').

Проблема: разные версии Python могут отсутствовать в PATH. Используйте полные пути или проверяйте через which python3.

Как определить версию Python внутри Docker-контейнера?

Добавьте команду в Dockerfile для вывода версии при сборке или выполните её в запущенном контейнере.

# Dockerfile
FROM python:3.11-slim
RUN python --version

При запуске: docker run --rm myimage python --version.

Ошибка: использование образа без Python. Выбирайте официальные образы python:*.

Как получить версию Python в системах CI (GitHub Actions, GitLab CI)?

Для отладки или динамических проверок можно использовать встроенные команды шагов.

Пример для GitHub Actions:

- name: Check Python version
  run: python --version

В GitLab CI:

before_script:
  - python --version

Проблема: образ CI может не содержать Python. Указывайте образ с предустановленным Python, например image: python:3.11.

Как получить версию Python в Jupyter Notebook или IPython?

Выполните Python-код в ячейке:

import sys
sys.version

Или используйте магическую команду %python --version (работает не во всех версиях). Альтернатива - модуль platform.

Особенность: версия ядра может отличаться от версии окружения. Проверяйте через sys.executable путь к интерпретатору.

Как определить версию Python на Windows с помощью утилиты py?

Запустите py --version или py -0 для списка установленных версий.

py --version
py -3 --version
py -0
Python 3.11.5
Python 3.11.5
Installed Pythons found by C:\Windows\py.exe:
 -3.11-64 *
 -3.9-64

Проблема: утилита py может отсутствовать, если Python установлен не через официальный установщик. Установите Python с флагом Add Python to PATH.

Расширенные примеры получения и использования версии Python

Сравнение версий с помощью модуля packaging

Для точного сравнения версий (например, 3.8.10 vs 3.9.0) используйте packaging.version.Version.

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

current = Version('3.9.10')
minimal = Version('3.8.0')
if current >= minimal:
    print("Версия подходит")
else:
    print("Требуется обновление")
Версия подходит

Установите пакет: pip install packaging.

Получение версии из переменной окружения или файла .python-version

Проекты часто фиксируют версию Python в файле .python-version (например, для pyenv):

Пример
import sys
import os

# Чтение из файла
if os.path.exists('.python-version'):
    with open('.python-version') as f:
        required = f.read().strip()
    print(f"Требуемая версия из файла: {required}")
    # Проверка
    if sys.version.startswith(required):
        print("Версия совпадает")
    else:
        print("Версия не совпадает")
Требуемая версия из файла: 3.11.5
Версия совпадает

Использование distutils.version.LooseVersion (устаревший способ)

Ранее применялся distutils, но он не рекомендуется:

Пример
from distutils.version import LooseVersion

ver1 = LooseVersion('3.10.2')
ver2 = LooseVersion('3.9.1')
if ver1 > ver2:
    print("Первая версия новее")
Первая версия новее

Динамическая установка зависимостей в зависимости от версии Python

В setup.py можно указывать разные требования для разных версий:

Пример
from setuptools import setup
import sys

requirements = ['numpy']
if sys.version_info[:2] >= (3, 8):
    requirements.append('pandas')

setup(
    name='example',
    install_requires=requirements
)

Такой подход гарантирует, что пакет pandas будет установлен только на Python 3.8+.

Проверка версии в интерактивном режиме и логирование

Пример
import sys
import logging

logging.basicConfig(level=logging.INFO)
logging.info("Python version: %s", sys.version.split()[0])
# или
logging.info("Major: %d, Minor: %d", sys.version_info.major, sys.version_info.minor)
INFO:root:Python version: 3.11.5

Получение версии сборки (build) для отладки многоплатформенных приложений

Пример
import sys
import struct

print("Архитектура:", struct.calcsize("P") * 8, "bit")
print("Версия билда:", sys.version)
print("Платформа:", sys.platform)
Архитектура: 64 bit
Версия билда: 3.11.5 (main, Sep 11 2023, 08:19:27) [GCC 12.2.0]
Платформа: linux

Использование pyenv для выбора версии по проекту

Пример
# Команды оболочки
pyenv versions          # список установленных версий
pyenv local 3.11.5     # установить локальную версию для проекта
python --version       # теперь показывает 3.11.5
  system
  3.9.10
* 3.11.5 (set by /home/user/project/.python-version)

Полезно, когда нужно переключаться между версиями без глобальной установки.

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

Пример
import subprocess

result = subprocess.run(['python3', '--version'], capture_output=True, text=True)
version_output = result.stdout.strip()
print(f"Версия из subprocess: {version_output}")
# или через -c
result = subprocess.run(['python3', '-c', 'import sys; print(sys.version_info[0])'], capture_output=True, text=True)
print(f"Мажорная версия: {result.stdout.strip()}")
Версия из subprocess: Python 3.11.5
Мажорная версия: 3

Проверка версии с помощью requirements.txt и установка только для нужной версии

Пример
# файл requirements.txt
numpy>=1.21
pandas>=1.3; python_version >= '3.8'

При установке pip install -r requirements.txt менеджер пакетов учтёт маркер python_version.

Получение версии Python из удалённого сервера (SSH)

Пример
import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username='user', key_filename='key.pem')
stdin, stdout, stderr = ssh.exec_command('python3 --version')
print(stdout.read().decode().strip())
ssh.close()
Python 3.10.12

Установите пакет: pip install paramiko.

Получение версии Python - comments

En
Get python version (python)