今回新しいサーバが届きpyenvを入れた時少しつまずいたので忘備録.
pyenvを入れた
とりあえず,Linuxbrew(入れ方はこちら参照)を入れて下記コマンドでインストール
$ brew install pyenv
インストールが終了したら,その後,以下を実行
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
これで基本的な設定はできたので,
source ~/.bashrc
で読みこむ.
$ pyenv versions
* system
確かに動いていることを確認.普通ならこれで大丈夫なはず.
再度ログインする
再度ログインした時に,最初下のような表示がでた.
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.15.0-43-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 packages can be updated.
0 updates are security updates.
Last login: ***
No command 'pyenv' found, did you mean:
Command 'p7env' from package 'libnss3-tools' (universe)
Command 'pyvenv' from package 'python3-venv' (universe)
pyenv: command not found
なぜかpyenv: command not foundと出てしまった.確かに
$ which python
/path/.linuxbrew/bin/python
本体ならば.pyenv下のpython担っているはずだが,違う場所を見ている.ただ,
$ pyenv versions
* system
は普通に動く.そこでもう一度.bashrcを読み込んでみると.pyenv下のpythonを見る様になった.
$ source ~/.bashrc
$ which python
/path/.pyenv/shims/python
ただ,bashrcはログインするたびに読み込んでいるはず.ここでつまずいた.
解決策
わかってみると,そりゃ当たり前だ!という感じであった.無意識のうちに~/.profileが終わった後に~/.bashrcが実行されると思っていたが.~/.profileを見てみると
.profile
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
eval $(/path/.linuxbrew/bin/brew shellenv)
となっていた...!bashrcが先に実行されてしまっていた.これを順番を変えてあげて以下の様にする.
.profile
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
eval $(/path/.linuxbrew/bin/brew shellenv)
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
これで解決.そりゃそうだよね...