😵
pyenv で install した python バージョンに切り替えられない
半人日分の足踏み集大成
事象
会社から支給されたMacbookにて環境構築中に発生した出来事。
pyenv local
で install した python version に切り替えても何故か python の PATH が書き換わらなかった。
あれれと思い pyenv versions
でみると正しくアサインされている。
$ pyenv local 3.9.5
$ pyenv versions
system
* 3.9.5 (set by /path/to/project/.python-version)
$ python --version
Python 2.7.16
よくよく調べると pyenv の sims ディレクトリが空っぽだ。[1]
$ ls ~/.anyenv/envs/pyenv/shims/
$
普段ならここに実行ファイルが置かれるはずなのに…
よくある pyenv init --path
し忘れかと思ったが .zshrc に記載があることは確認済み。
謎。
tl;dr
- bash のバージョンが古かったのでバージョンアップしたら直った
環境
- MacBookPro 2020, macOS Catalina 10.15.X
- anyenv 1.1.4 (関係なし)
- pyenv 2.0.4-12-g3738c2a2
- bash 3.2.5 <-- こいつが犯人だった
原因
インストール時にひっそりとエラーが出てた (status code が 0 だったので気づかなかった...)
$ pyenv install 3.9.5
pyenv: /Users/developer/.anyenv/envs/pyenv/versions/3.9.5 already exists
continue with installation? (y/N) y
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.9.5.tar.xz...
-> https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz
Installing Python-3.9.5...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.9.5 to /Users/developer/.anyenv/envs/pyenv/versions/3.9.5
/Users/developer/.anyenv/envs/pyenv/pyenv.d/rehash/conda.bash: line 38: conditional binary operator expected
該当のコード を読むと
if [[ -v registered_shims[@] ]]; then
...
とある。 test
の -v
って何かなと調べてみた。
どうやら変数が未定義かを判断するオプションらしい、成程。
どうやら bash のバージョンが古いらしく、手元端末の bash では対応していない様子。ふえぇ
$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)
Copyright (C) 2007 Free Software Foundation, Inc.
てか2020年モデルのMacなのにバージョン古すぎでしょこれ…
(いつのバージョンから入ったのか少し調べたけど分からなかった。気になる…けどまぁいいか。
対応
Mac だったので brew で最新バージョンを導入
$ brew info bash
bash: stable 5.1.8 (bottled), HEAD
Bourne-Again SHell, a UNIX command interpreter
https://www.gnu.org/software/bash/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/bash.rb
License: GPL-3.0-or-later
==> Options
--HEAD
Install HEAD version
==> Analytics
install: 19,150 (30 days), 66,912 (90 days), 304,056 (365 days)
install-on-request: 16,100 (30 days), 56,321 (90 days), 258,538 (365 days)
build-error: 0 (30 days)
$ brew install bash
$ exec $SHELL -l # 参照先を正すためにシェル再起動
$ bash --version
GNU bash, バージョン 5.1.8(1)-release (x86_64-apple-darwin19.6.0)
Copyright (C) 2020 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
あとは pyenv rehash
で shims を再構築
$ pyenv rehash
Cloning into '/Users/developer/.anyenv/envs/pyenv/plugins/pyenv-virtualenv'...
remote: Enumerating objects: 2082, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 2082 (delta 6), reused 6 (delta 1), pack-reused 2064
Receiving objects: 100% (2082/2082), 590.25 KiB | 1.21 MiB/s, done.
Resolving deltas: 100% (1419/1419), done.
$ python --version
Python 3.9.5
めでたしめでたし。
-
参照先がanyenvなのは各人の環境で読み替えてください ↩︎
Discussion