Подтвердить что ты не робот

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

У меня есть файл Python, который, возможно, должен поддерживать версии Python < 3.x и >= 3.x. Есть ли способ интроспектировать среду выполнения Python, чтобы узнать версию, на которой он запущен (например, 2.6 or 3.2.x)?

4b9b3361

Ответ 1

Конечно, взгляните на sys.version и sys.version_info.

Например, чтобы проверить, что вы используете Python 3.x, используйте

import sys
if sys.version_info[0] < 3:
    raise Exception("Must be using Python 3")

Здесь sys.version_info[0] - номер основной версии. sys.version_info[1] даст вам младший номер версии.

В Python 2.7 и более поздних версиях компоненты sys.version_info также доступны по имени, поэтому основной номер версии - sys.version_info.major.

См. также Как проверить версию Python в программе, использующей новые языковые функции?

Ответ 2

Попробуйте этот код, это должно работать:

import platform
print(platform.python_version())

Ответ 4

Лучшее решение зависит от того, сколько кода несовместимо. Если для поддержки Python 2 и 3 существует много мест, six - это модуль совместимости. six.PY2 и six.PY3 являются двумя булевыми, если вы хотите проверить версию.

Однако лучшим решением, чем использование множества операторов if, является использование six функций совместимости, если это возможно. Гипотетически, если Python 3000 имеет новый синтаксис для next, кто-то может обновить six, чтобы ваш старый код все равно работал.

import six

#OK
if six.PY2:
  x = it.next() # Python 2 syntax
else:
  x = next(it) # Python 3 syntax

#Better
x = six.next(it)

http://pythonhosted.org/six/

Приветствия

Ответ 5

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

import platform;

print(platform.sys.version);

Вывод для моей системы:

3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0]

Что-то очень подробное, но машинно-разборное, - это получить объект version_info из platform.sys, а затем использовать его свойства, чтобы выполнить предопределенный курс действий. Например:

import platform;

print(platform.sys.version_info)

Вывод в моей системе:

sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)

Ответ 6

Вот код, который я использую с sys.version_info, чтобы проверить установку Python:

def check_installation(rv):
    current_version = sys.version_info
    if current_version[0] == rv[0] and current_version[1] >= rv[1]:
        pass
    else:
        sys.stderr.write( "[%s] - Error: Your Python interpreter must be %d.%d or greater (within major version %d)\n" % (sys.argv[0], rv[0], rv[1], rv[0]) )
        sys.exit(-1)
    return 0

...

# Calling the 'check_installation' function checks if Python is >= 2.7 and < 3
required_version = (2,7)
check_installation(required_version)

Ответ 7

Чтобы сделать скрипты совместимыми с Python2 и 3, я использую:

from sys import version_info
if version_info[0] < 3:
    from __future__ import print_function

Ответ 8

Пример проверки версии ниже.

Обратите внимание, что я не прекращаю выполнение, этот фрагмент просто:
- ничего не делать, если точная версия соответствует
- напишите INFO, если ревизия (последний номер) отличается
- напишите ПРЕДУПРЕЖДЕНИЕ, если какой-либо из основных + второстепенных отличается

import sys
import warnings

def checkVersion():
    # Checking Python version:
    expect_major = 2
    expect_minor = 7
    expect_rev = 14
    if sys.version_info[:3] != (expect_major, expect_minor, expect_rev):
        print("INFO: Script developed and tested with Python " + str(expect_major) + "." + str(expect_minor) + "." + str(expect_rev))
        current_version = str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2])
        if sys.version_info[:2] != (expect_major, expect_minor):
            warnings.warn("Current Python version was unexpected: Python " + current_version)
        else:
            print("      Current version is different: Python " + current_version)

Ответ 9

Поскольку все, что вас интересует, это наличие у вас Python 2 или 3, немного хакерский, но, безусловно, самый простой и 100% работающий способ сделать это будет следующим: python python_version_major = 3/2*2 Единственный недостаток этого заключается в том, что когда есть Python 4, он, вероятно, все еще даст вам 3.