PyenvでどうしてもPythonバージョンが切り替わらなかった話

# 現象
Pyenvで3.6.6をインストールしてそちらに切り替えてるのに、Pythonのバージョンが切り替わらない

```
$ pyenv versions
  system
* 3.6.6

$ python --version
Python 2.7.12
```

しかし、Pytestから実行した場合は3.6.6が使われ、シェルから起動した場合は2.7になる

```
$ cat test_version.py
# 実行環境のPythonバージョンが3.6.6だったらOKとなる関数
def test_version():
    import sys
    assert sys.version_info == (3,6,6, 'final', 0)

$ pytest  test_version.py  -v
============================================================================================================ test session starts ============================================================================================================
platform linux -- Python 3.6.6, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- /home/rock64/.pyenv/versions/3.6.6/envs/tdd/bin/python
cachedir: .pytest_cache
hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase('/home/rock64/repositories/python-tdd/.hypothesis/examples')
rootdir: /home/rock64/repositories/python-tdd, inifile:
plugins: hypothesis-3.71.10
collected 1 item

test_version.py::test_version PASSED    # OKとなっている                                                                                                                                                                                              [100%]

========================================================================================================= 1 passed in 0.06 seconds ==========================================================================================================

# 一方シェルから呼び出してみると2.7.12と出る
$ cat version.py
import sys

print(sys.version)

$ python version.py
2.7.12 (default, Dec  4 2017, 14:50:18)
[GCC 5.4.0 20160609]
```

？？？
（こういうふうに整理して書くとすでにモロバレな気はする…^^;）

# 調査
まずPyenvの設定が正しいのかを確認する。

```
$ vi ~/.bash_profile

...(略)...
# Pyenv設定
export PYENV_ROOT=${HOME}/.pyenv
export PATH=${PYENV_ROOT}/bin:${PATH}
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
```
大丈夫っぽい
次に実行ファイルの場所が正しく参照されているか確認

```
$ which python
/home/rock64/.pyenv/shims/python
```
これもシステムのpythonではなくPyenvの配下を指しているので問題なさそうだ。

[この記事](https://qiita.com/1234224576/items/11ad3509fe4b0a9a33ed)によると、

> pyenvのバージョン選択はまず、pyenv shellで設定されるPYENV_VERSION環境変数。
次に、pyenv localで設定できる、カレントディレクトリにある.python-versionファイル。
次に、pyenv global で設定できる~/.pyenv/versionファイル。
全てがなかったらsystemのpython。

だそうだ。確認してみる。

```
$ printenv |grep PYENV_VERSION
# なし
```
環境変数には設定されていない。

```
$ cat .python-version
3.6.6
```
ローカルディレクトリに`.python-version`があり、正しく設定されている。
うーん、環境がRock64というマイナーSBCだから、またCPUアーキ(aarch64)関係のバグかなー？？などと人のせいにするモードに入っていたが。。。

# 結論
ここでふと気づいて、エイリアス設定がされているのではないか？と考えた。

```
$ cat ~/.bash_aliases
alias python='python2'
```

…

あったぁぁぁぁ！(棒)

そりゃどうやってもpython2で実行するわな。。。

# 原因
まあ本筋とは関係ないのですが、このようなエイリアスが設定されていた理由についても調べた。
通常エイリアスでpython3 -> pythonというふうに設定することはあっても、python2 -> pythonというパターンはあまり考えにくいと(個人的には)思っていたので、気づくのに遅れたというのもある。

ファイルの更新履歴を `ls -aucl`などとして調べると、今年(2018)の8月となっていた。
何やったっけと思い、ツイートをあさってみると

<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr">Rustをインストールしようとしてなんじゃこのアーキ(aarch64)って怒られたのでソースからビルドしようと思ってdependenciesにPython2.7(3.xではなく)があってエイリアスで切り替えるのも面倒だからanaconda入れようとしてダウンロードサイズデカイなってなってよくみたらもうpyenv入ってたのでニッコリ</p>&mdash; Umu (@Umu999_0YOtJHCt) <a href="https://twitter.com/Umu999_0YOtJHCt/status/1027164564025094149?ref_src=twsrc%5Etfw">August 8, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr">やはりエイリアスが妥当だった（後悔）</p>&mdash; Umu (@Umu999_0YOtJHCt) <a href="https://twitter.com/Umu999_0YOtJHCt/status/1027166966497177600?ref_src=twsrc%5Etfw">August 8, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


ばっちりエイリアス設定して回避したと書いてあった。。。
横着せずにPyenv使っとけって話ですね。