Как узнать установленную версию Python в различных средах
Способы получения версии Python
Как быстро узнать установленную версию Python из командной строки?
Наиболее распространённый способ - выполнить команду python --version или python -V. Она выводит версию интерпретатора, установленного по умолчанию.
python --versionGet 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.