pyenv備忘録
$ tree -L 1 $HOME/.pyenv
/home/ubuntu/.pyenv
├── Dockerfile
├── Makefile
├── README.md
├── bin
├── completions
├── libexec
├── man
├── plugins
├── pyenv.d
├── shims
├── src
├── terminal_output.png
├── test
├── version
└── versions
pyenv local hogeがそのディレクトリ下でしか動かないことを確認する
hoge@LAPTOP-hoge:~/abc$ pyenv versions
system
2.7.15
3.6.9
* 3.8.10 (set by /home/hoge/.pyenv/version)
globalで3.8.10が使われる設定になっている。
今いるディレクトリ下で使うpythonを3.6.9にする
hoge@LAPTOP-hoge:~/abc$ pyenv local 3.6.9
hoge@LAPTOP-hoge:~/abc$ pyenv versions
system
2.7.15
* 3.6.9 (set by /home/hoge/abc/.python-version)
3.8.10
3.6.9が使われる設定になっているが、一個上のディレクトリではどうだろうか?
hoge@LAPTOP-hoge:~/abc$ cd ../
hoge@LAPTOP-hoge:~$ pyenv versions
system
2.7.15
3.6.9
* 3.8.10 (set by /home/hoge/.pyenv/version)
一個上のディレクトリではpyenv global 3.8.10なので3.8.10が使われるようになっている。
pyenv local バージョン情報
としたディレクトリには.python-versionが作成され、中にはlocalで指定した3.6.9という文字が書き込まれている。
hoge@LAPTOP-hoge:~/abc$ ls
. .. .python-version
hoge@LAPTOP-hoge:~/abc$ cat .python-version
3.6.9
調べてみると詳しめの解説があるサイトにたどり着いた。
https://outputable.com/post/about-pyenv/#pyenv-global
バージョン情報はpyenv localコマンドを実行したディレクトリに「.python-version」ファイルとして記述され、管理されています。
※globalや上位階層の「.python-version」より、より深い階層の「.python-version」が優先されるようです。
(より具体的に言うと、下層 -> 上層順に探索され、「$HOME/.pyenv/version」ファイルの情報もない場合、システムのPython, pipが呼び出されるようです)
shims以下のコマンド実行(local指定している場合)の挙動
→shims以下の同名コマンドが、.python-versionファイルに記載されたpythonを~/.pyenv/versions/から探し出して実行する
まとめ
.python-version
がなければ.pyenv/version
それもなければsystemにあるpythonを使用
ex.
local指定がある場合python,pipなどのコマンドが実行されると、shims以下の同名コマンドが実行され
.python-version
に記載のpythonバージョンのコマンドが.pyenv/versions/以下
から実行される
local指定がない場合.pyenv/version
に記載のpythonバージョンがversions以下のファイルから実行されるはず。(globalバージョンの情報は
.pyenv/version
に記載される)それもなければsystemにあるpythonを使用。