Определение версии Python во время выполнения программы

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы определить версию Python во время выполнения кода, вы можете воспользоваться модулем sys и его атрибутом version_info.

Python
Скопировать код
import sys

version = "{}.{}".format(sys.version_info.major, sys.version_info.minor)
print("Работает версия Python", version)

Код выше поможет вам определить основную и подверсию Python, на которых запущен ваш скрипт.

Кинга Идем в IT: пошаговый план для смены профессии

Управление потоком для специфических версий Python

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

Python
Скопировать код
import sys

if sys.version_info.major == 3:
    print("Этот блок для Python 3")
elif sys.version_info.major == 2:
    print("Python 2? Покажется, вы затерялись во времени!")

Данный фрагмент кода проверяет, используется ли Python 3.x или Python 2.x, и выполняет соответствующий блок кода.

Получение полной информации о версии с помощью sys.version

Если нужно получить полную строку версии, включающую также данные о компиляторе и сборке, можно использовать атрибут sys.version:

Python
Скопировать код
import sys

print(sys.version)

Альтернативный способ определения версии: модуль platform

Модуль platform – альтернативный вариант для определения версии Python. Этот метод позволяет получить версию почти как в обычном разговоре:

Python
Скопировать код
import platform

print(platform.python_version())

Несовместимые версии Python: включаем тревожный сигнал!

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

Python
Скопировать код
import sys

if sys.version_info < (3, 5):
    raise Exception("Требуется Python версии 3.5 или новее, обновите систему!")

Визуализация

Можно вообразить sys.version_info как дисплей временной машины, на котором меняются версии Python:

Машина времени Python
Python 3.8 🛸
Python 3.7 🚀
Python 2.7 ⏳

Если индикатор указывает 2 (sys.version_info.major == 2), значит, как будто мы вернулись в прошлое! ⏳

Если же он указывает 3 (sys.version_info.major == 3), то мы живём сегодня и смотрим в завтра! 🚀🛸

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

Разница в синтаксисе между версиями Python

Адаптация кода под специфические версии Python может включать условные импорты и функции, характерные для отдельных версий:

Python
Скопировать код
try:
    from contextlib import redirect_stdout
except ImportError:
    # Адаптировано для Python 2

Зависимости от версии для сторонних библиотек

При работе со сторонними библиотеками можно использовать условные зависимости в скриптах установки:

Python
Скопировать код
from setuptools import setup

setup(
    install_requires=[
        'library>=2,<3' if sys.version_info < (3, 0) else 'library>=3,<4'
    ]
)

Это означает выбор разных версий библиотек в зависимости от версии Python.

Явное указание версии в скриптах через shebang

Можно определить, какую версию Python должен использовать скрипт, с помощью строки shebang:

Bash
Скопировать код
#!/usr/bin/env python3

Сравнение версий программно

Кортеж sys.version_info позволяет сравнивать версии с помощью операций сложного сравнения. Это облегчает определение актуальности используемой версии Python:

Python
Скопировать код
import sys

min_version = (3, 5)
current_version = sys.version_info[:3]
if current_version >= min_version:
    print("Версия Python вполне современная!")
else:
    print("Пришло время обновить Python!")

Использование hexversion для упрощения сравнения версий

Атрибут sys.hexversion предлагает простой способ для сравнения версий Python:

Python
Скопировать код
import sys

if sys.hexversion >= 0x03000000:
    print("Вы используете Python 3 или более позднюю версию!")

Полезные материалы

  1. sys — Системно-специфические параметры и функции — документация Python 3.12.1 — официальная документация атрибута sys.version_info.
  2. Модуль sys в Python – GeeksforGeeks — подробное руководство по модулю sys в Python.
  3. PEP 396 – Номера версий модулей — рекомендации по обозначению версий модулей в Python.
  4. platform — Доступ к идентифицирующим информациям о платформе — документация Python 3.12.1 — методы модуля platform на примере определения версий Python.
  5. Семантическое версионирование 2.0.0 — описание схемы версионирования для языка Python.
  6. Загрузка Python | Python.org — список всех версий Python.
  7. Шпаргалка: написание кода, совместимого с Python 2 и 3 — советы по созданию кода, совместимого с Python 2 и 3.