質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.80%

pythonとターミナルで打つとPython3で実行されるように変更したい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,237

score 144

前提・実現したいこと

pythonとターミナルで打つとPython3で実行されるように変更しようとしています。

現在、Pythonのバージョンは以下になっていますが、ライブラリのインストールなどでPython3以上を主に使うので、pythonとターミナルで打つとPython3.7.4で動作するようにしたいです。

$ python -V
Python 2.7.16

pyenvは以下のようになっています。

$ pyenv versions
  system
  3.6.0
* 3.7.4 (set by /Users/username/.pyenv/version)

発生している問題・エラーメッセージ

解決方法の一つとして、記事「Python 3 インストール Homebrew によるインストール(Mac)」に以下のような記述があったのですが、現在の~/.bash_profileをどのように変更したら良いのかわからず、困っています。

python と打ち込んで Python 3 が動くようにしたければ,/usr/local/opt/python/libexec/bin のパスを /usr/bin より先に設定します。

該当のソースコード

~/.bash_profile

export PYENV_ROOT="$HOME/.pyenv"
export PATH=/usr/local/bin:$PATH
eval "$(pyenv init -)"
export PYENV_ROOT=${HOME}/.pyenv
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
fi

export PATH=/usr/lib/postgresql/11.5/bin/:$PATH
export PATH=$HOME/.nodebrew/current/bin
export PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH"# for nodebrew
export PATH=$HOME/.nodebrew/current/bin:$PATH

試したこと

peenを用いて、全ての環境のPythonのバージョンを3.7.4にしようと試みましたが、失敗に終わりました。

$ pyenv global 3.7.4
$ source ~/.bash_profile
$ python -V
Python 2.7.16

ご回答を受けて試したこと

~/.bash_profileを2通りの方法で修正しましたが、pythonとターミナルで打つとPython3で実行することができておらず、検索しても類似の問題が出てこなくて困っている状態です。

export PATH=/usr/local/bin:$PATHexport PATH=$HOME/.pyenv/bin:$PATHに書き換えた場合

export PYENV_ROOT="$HOME/.pyenv"
export PATH=$HOME/.pyenv/bin:$PATH
eval "$(pyenv init -)"
export PYENV_ROOT=${HOME}/.pyenv
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
fi

export PATH=/usr/lib/postgresql/11.5/bin/:$PATH
export PATH=$HOME/.nodebrew/current/bin
export PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH"# for nodebrew
export PATH=$HOME/.nodebrew/current/bin:$PATH


以下の結果に

$ type python
python is /usr/bin/python
$ python -V
Python 2.7.16

export PATH=/usr/local/bin:$PATHに加えてPATH=$HOME/.pyenv/bin:$PATHを書き加えた場合

export PYENV_ROOT="$HOME/.pyenv"
export PATH=/usr/local/bin:$PATH
PATH=$HOME/.pyenv/bin:$PATH
eval "$(pyenv init -)"
export PYENV_ROOT=${HOME}/.pyenv
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
fi

export PATH=/usr/lib/postgresql/11.5/bin/:$PATH
export PATH=$HOME/.nodebrew/current/bin
export PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH"# for nodebrew
export PATH=$HOME/.nodebrew/current/bin:$PATH


の場合、以下の結果に

$ type python
python is hashed (/usr/bin/python)
$ python -V
Python 2.7.16

type pyenvpyenv init -の実行結果

$ type pyenv
pyenv is a function
pyenv () 
{ 
    local command;
    command="${1:-}";
    if [ "$#" -gt 0 ]; then
        shift;
    fi;
    case "$command" in 
        rehash | shell)
            eval "$(pyenv "sh-$command" "$@")"
        ;;
        *)
            command pyenv "$command" "$@"
        ;;
    esac
}

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

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

補足情報(FW/ツールのバージョンなど)

macOS Catalina バージョン10.15.4

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

あなたのデフォルトシェルは/bin/bashですか?

最近のMacOSXのデフォルトシェルは/bin/zshに変わりました。

もし、/bin/zshを使っているのなら、.bash_profileではなく、
.zprofile
にPathやpyenvの設定を記述してみてください。

ちなみにデフォルトシェルの確認方法はコンソールから
$ echo $SHELL
です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/04/19 22:15

    >二回続けて書いているのはなぜでしょうか。
    短く分けて書く方が見やすいし、メンテ(PATHの追加とか削除)が
    しやすいからです。全部のPATHを1行で書くと見にくいでしょう。
    homebrewを使っているなら、sbin、bin、optあたりはPATHに追加すればいいです。
    たとえばこんな感じで。
    export PATH=/usr/local/sbin:${PATH}
    export PATH=/usr/local/bin:${PATH}
    export PATH=/usr/local/opt:${PATH}
    if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi

    あとは、あなたの環境に合わせて他のアプリのPATHを追加していけばいいです。

    キャンセル

  • 2020/04/20 10:06

    ありがとうございます。「あなたの環境に合わせて他のアプリのPATHを追加」とありますが、今回の「pythonとターミナルで打つとPython3で実行されるように変更」するためには現在の書き方では実行できず、そのためにどう変更すればいいかはどのように調べればいいのでしょうか。

    キャンセル

  • 2020/04/20 10:44

    >「あなたの環境に合わせて他のアプリのPATHを追加」

    この一文は、他に追加したいパスが有れば同じように記述してください、と言う意味で書きました。混乱させてすみません。

    キャンセル

checkベストアンサー

+1

python と打ち込んで Python 3 が動くようにしたければ,/usr/local/opt/python/libexec/bin のパスを /usr/bin より先に設定します。

というのは、そのページに従って Homebrew でPython3をインストールした場合でしょう。あなたの場合は、pyenvでインストールしちゃっているので関係ありません。

pyenvを~/.pyenvにインストールしたのであれば、~/.bash_profileまたは~/.zprofileに、

PATH=$HOME/.pyenv/bin:$PATH
eval "$(pyenv init -)"


を追加してください。

上記を実行した上で、type pythonで、pyenvのものになっていることを確認しましょう。なっていなければpyenvのインストール先の認識が違います。

pyenvなどを利用するには、「PATH」と「カレントディレクトリ」の理解が必須なので、理解できてない場合は、pyenv使わないで別の方法でPythonをインストールしたほうがいいです。とはいえ、プログラミングするなら、「PATH」と「カレントディレクトリ」の理解はどうせ必要なので、この機会に理解すると良いかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/04/19 22:03

    ご回答いただきましてありがとうございます。現状を「ご回答を受けて試したこと」に追記致しましたが、「なっていなければpyenvのインストール先の認識が違います。」とありましたが、この場合どうすれば良いのでしょうか。

    キャンセル

  • 2020/04/19 22:24

    .bash_profileを修正したら、source .bash_profile は行っていますよね?

    type pyenv

    pyenv init -
    の実行結果を載せてください。

    あるいは、pyenvをあきらめて、
    > 理解できてない場合は、pyenv使わないで別の方法でPythonをインストールしたほうがいいです。
    とするか。

    キャンセル

  • 2020/04/20 09:54

    source .bash_profile は行っています。実行結果の追記をいたしました。「pyenv使わないで別の方法でPythonをインストール」という方法について、pyenv以外でインストールしたことはありますが、その際もpythonとターミナルで打つとPython3で実行ができず、今回の方法にたどり着いたので、bash_profileを修正する他ないという状況だと理解しています。

    キャンセル

  • 2020/04/20 10:25 編集

    ああ、わかりました。eval "$(pyenv init -)" したあとでPATHの先頭にシステムのディレクトリを追加しているからです。

    PATH=$HOME/.pyenv/bin:$PATH
    eval "$(pyenv init -)"
    は、末尾に追加してください。それ以降の行で、PATHの先頭に何かを追加するときは意味を把握した上でやりましょう。

    他のpyenv関係は全部削除。

    「設定ファイルの末尾に追加しなさい」というのを言われるがままにやるとこうなりますので、どちらを前に書いて、どちらを後ろに書くかはよく考えましょう。
    そのためには、
    ・PATHの意味を理解する
    ・自分が何をしているのか理解する

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る