LoginSignup
8
5

More than 3 years have passed since last update.

poetry shellしたはずなのに、.venv内のpythonが実行されない

Posted at

環境

> sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14
BuildVersion:   18A391

> pyenv --version
pyenv 1.2.9

> pyenv which python
/Users/username/.pyenv/versions/3.7.1/bin/python

問題

poetry shellしたはずなのに、.venv内のpythonが実行されない

> poetry shell

> which python
/Users/username/.pyenv/shims/python

原因

printenvの結果を見てみると以下のようになっていた

...
/Users/username/.pyenv/shims
/Users/username/.ghq/github.com/username/sample/.venv/bin
...

あれ....venvよりも前に.pyenvが来てる...なんでだ...

  • ~/.bashrcに書かれているeval $(pyenv init -)が悪さをしているのかも?

「そういえば、~/.bashrceval $(pyenv init -)って記述してるんだった」

「そもそも、pyenv init -ってなんだ!?」

「とりあえず、実行してみるか」

> pyenv init -
export PATH="/Users/username/.pyenv/shims:${PATH}"
export PYENV_SHELL=bash
source '/usr/local/Cellar/pyenv/1.2.9/libexec/../completions/pyenv.bash'
command pyenv rehash 2>/dev/null
pyenv() {
  local command
  command="${1:-}"
  if [ "$#" -gt 0 ]; then
    shift
  fi

  case "$command" in
  activate|deactivate|rehash|shell)
    eval "$(pyenv "sh-$command" "$@")";;
  *)
    command pyenv "$command" "$@";;
  esac
}

/Users/username/.pyenv/shimsを前に持ってきてる!?」

「これのせいか!」

解決方法

eval $(pyenv init -)~/.bashrcではなく、~/.bash_profileに書く

それぞれのファイルは以下のように読み込むタイミングが異なる

  • ~/.bash_profileはログイン毎に読み込まれる
  • ~/.bashrcはbashを起動する毎に読み込まれる

PoetryのIssuesにeval $(pyenv init -)~/.bashrcではなく、~/.bash_profileに書けばいいんじゃない?ってコメントがあった

なるほど!~/.bashrcに書いていたから、poetry shellしたときにeval $(pyenv init -)が実行されてしまい、うまく.venv内のpythonが実行されなかったのかも!

eval $(pyenv init -)~/.bash_profileに書き写して、poetry shellを実行

> poetry shell

> which python
/Users/username/.ghq/github.com/username/sample/.venv/bin/python

ちゃんと.venvの中のpythonを見に行ってる!!!

めでたしめでたし!

まとめ

~/.bashrc~/.bash_profileの違いをちゃんと理解しないと痛い目にあう

参考文献

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5