Pyenv を入れた後、”command not found” で Python がインストールできない時の対処
Guten Tag, ベルリンより伊藤です。
Pyenv を入れて意気揚々とPythonインストールしようとしたら、次のエラーで失敗しました。
$ pyenv install 3.8.2 /usr/local/bin/pyenv-install: line 53: python-build: command not found /usr/local/bin/pyenv-install: line 76: parse_options: command not foundこのエラー事例を探しても見当たらなかったので、解決した方法をご紹介します。
OS: MacOS Mojave 10.14.6
インストールまでにやったこと
Pyenvのインストール & 環境設定
pyenv のセットアップですが、複数の外部サイト(※)を参照した限り、だいたい同じだったので、次の方法で行いました。
※例えば: MacでPython使う時の最低限のメモ(pyenv編) - Qiita
参照した情報の限りでは、もうこの次にPythonインストールに進んでいるんですが、冒頭のエラーに引っかかり次に進めません。
※参考に載せておきますが不要な方は読み飛ばしてください※
Pyenv自体が入っているのは確認できました。参照した情報は正しく設定できているようです。まだPyenvではPythonをインストールしていないので、Pythonは当然まだローカルのパスを参照しています。
$ pyenv -v pyenv 1.2.18 $ pyenv versions * system (set by /Users/mai/.pyenv/version) $ which pyenv /usr/local/bin/pyenv $ cat .bash_profile | grep -i pyenv export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" $ which python /usr/bin/pythonPATHで通している場所には、ディレクトリのみが作成されていました。
$ ls -lR /Users/mai/.pyenv total 0 drwxr-xr-x 2 mai staff 64 May 7 13:29 shims drwxr-xr-x 2 mai staff 64 May 4 14:09 versions /Users/mai/.pyenv/shims: /Users/mai/.pyenv/versions:
which pyenv
のパスを追ってみるとこのようになっていました。この辺はこれで問題ないようでした。
前提条件の再確認
参考にしたサイトでは触れられていませんでしたが、改めて 公式のGitHubページ を確認すると、「Basic GitHub Checkout」の手順3~5ができてなかったので、対応しました。
■ 3-4. pyenv init の追加 & 変更を反映
.bash_profile に既に
eval "$(pyenv init -)"
が含まれていましたが、公式に従うよう、既存のを消して下記で追加し直しました:
■ 5. 依存するビルド環境の用意
Suggested build environment に従い、各種インストールします。
・Xcode Command Line Tools のインストール
$ xcode-select --install
・Homebrewで各種インストール(
brew list
で既存のモジュールを確認し、ないものだけ指定)
で、ここまでやっても
pyenv install
の結果は冒頭の通りで変わりませんでした。今回のエラーには意味なかったのかもしれませんが、推奨環境に整えたということで。
シンボリックリンクの再関連付け
手詰まりになり、社内の猛者チャンネルで上の状況を説明したところ、教えてもらった回答で治りました!
(教えていただき、ありがとうございました!!)
下記ディレクトリの中にpython-buildがありますか?
→ありました
もしあるのであれば、下記コマンドで再度関連づけてみてはいかがでしょうか?
→1つ追加で関連付けされたようです!
そして、その後無事にエラーなくPythonインストールできるようになりました!
$ pyenv install 3.8.2 $ which python /Users/mai/.pyenv/shims/python $ pyenv global 3.8.2 $ pyenv versions system * 3.8.2 (set by /Users/mai/.pyenv/version) $ python -V Python 3.8.2
結果、
brew unlink pyenv && brew link pyenv
でエラー解消に繋がりました。
猛者すごい...
原因はなんだったか分からないですが、実際には他の作業と並行してやっていたので何かが影響してしまったのかも...ググっても情報がなかったということは稀有な例なのかもしれませんが、トラブルシューティングにご参考くださいませ。
その後、 virtualenv の入れ方・使い方は下記ブログを参考にしました!
anyenvからpyenv+virtualenvをインストールしてバージョンやパッケージを切替可能なPython環境を用意する
おまけ:Pyenv を入れるにあたり既存の Python を消すべき?
ちなみに、Pyenv を入れるまでは、ローカルの Python 2.7 を使っていたのですが、2.7 は廃止するということで Python 3.8 も入れたところでした。この時に気持ち悪いので使わないローカルの Python は消してしまおうと思ったんですが、いろいろ調べた限り、 既存の Python を削除するのはあまり推奨されていない ようです。
それでも消したいという意固地な方、下記のような方法でアンインストールできました。
私もインストールしたてで何にも使っていなかった 3.8 の方は消去しました。
また、この時
pip2 freeze
でパッケージを確認してみたら awscli が入っており、古い Python に依存しているのがやっぱり気持ち悪かったので一度アンインストールし、
Python個別のインストールの不要な
AWS CLI バージョン2
を入れ直しました。
これを機に各種バージョンなど見直してはいかがでしょう。