Pythonバージョンの取得方法

実行中のPythonプログラムからPythonバージョンを取得する方法と実行例を示す。
バージョン取得方法は以下の通り複数存在する:

1. `sys.version_info`
2. `platform.python_version_tuple()`
3. `six`

# 方法1: sys.version_info
`sys.version_info`は実行環境のPythonバージョンを格納している。
Python 2.7未満/3.0 では`tuple`、2.7/3.1以降は`namedtuple`が型となる。

## 実行例
```pycon:python2.5
>>> import sys
>>> sys.version_info
(2, 5, 2, 'final', 0)
```

```pycon:python2.7
>>> import sys
>>> sys.version_info
sys.version_info(major=2, minor=7, micro=12, releaselevel='final', serial=0)
```

```pycon:python3.5
>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=5, micro=2, releaselevel='final', serial=0)
```

## Reference
[28.1. sys — System-specific parameters and functions — Python 2.7.11 documentation]
(https://docs.python.org/2.7/library/sys.html)

> ## sys.version_info
A tuple containing the five components of the version number: major, minor, micro, releaselevel, and serial. All values except releaselevel are integers; the release level is 'alpha', 'beta', 'candidate', or 'final'. The version_info value corresponding to the Python version 2.0 is (2, 0, 0, 'final', 0). The components can also be accessed by name, so sys.version_info[0] is equivalent to sys.version_info.major and so on.

>New in version 2.0.

>Changed in version 2.7: Added named component attributes


# 方法2: platform.python_version_tuple()
`platform.python_version_tuple()` はPythonバージョンに依らず、`tuple` としてバージョン番号情報を取得する。

## 実行例
```
>>> import platform
>>> platform.python_version_tuple()
('2', '7', '14')
```

```pycon:python3.6
>>> import platform
>>> platform.python_version_tuple()
('3', '6', '4')
```

## Reference
[15.15. platform — Access to underlying platform’s identifying data — Python 2.7.11 documentation](https://docs.python.org/2.7/library/platform.html)

>New in version 2.3.

>## platform.python_version_tuple()
Returns the Python version as tuple (major, minor, patchlevel) of strings.

>Note that unlike the Python sys.version, the returned value will always include the patchlevel (it defaults to '0').


# 方法3: six
[six](https://pypi.python.org/pypi/six)で取得できるのはPython 2系か、Python 3系かの判別(とPython 3.4 以上かは判定できる)。

## 実行例
```pycon:Python2.7
>>> import six
>>> six.PY2
True
>>> six.PY3
False
>>> six.PY34
False
```

```pycon:Python3.6
>>> import six
>>> six.PY2
False
>>> six.PY3
True
>>> six.PY34
True
```

内部実装では、上述の `sys.version_info` を使用している。

```py:six.py
# Useful for very coarse version differentiation.
PY2 = sys.version_info[0] == 2
PY3 = sys.version_info[0] == 3
PY34 = sys.version_info[0:2] >= (3, 4)
```


# おまけ: Shell Script上でPythonバージョン判定
## Pythonのmajor versionを取得するワンライナー

```bash:Python2/3
$ pymajorver=$(python -c "from __future__ import print_function; import sys; print(sys.version_info[0])")
$ echo $pymajorver
3
```

以下のように `case` 文でも使える:

```bash:
case $(python -c "from __future__ import print_function; import sys; print(sys.version_info[0])") in
    "2") echo "Python2 !!" ;;
    "3") echo "Python3 !!" ;;
    *) echo "Unknown Python version" ;;
esac
```

## Pythonのmajor/minorバージョンを取得するワンライナー
### Python 2/3両対応
```bash:Python2.7
$ python -c "from __future__ import print_function; import sys; print('{}{}'.format(*sys.version_info[0:2]))"
27
```

### Python 3のみ

```bash:Python3.6
$ pyversion=$(python -c "import sys; print('{}{}'.format(*sys.version_info[0:2]))")
$ echo $pyversion
36
```