web-dev-qa-db-ja.com

切り替えできないPython pyenv

Pyenvを使用してpython2とpython3を切り替えたいです。

次のコードでpython2とpython3とpyenvを正常にダウンロードしました。

brew install pyenv

brew install pyenv-virtualenv

pyenv install 2.7.10

pyenv install 3.5.0

ただし、python2からpython3に切り替えることはできません。

Soma-Suzuki:~ Soma$ python --version
Python 2.7.10
Soma-Suzuki:~ Soma$ pyenv global
2.7.10
Soma-Suzuki:~ Soma$ pyenv versions
  system
* 2.7.10 (set by /Users/Soma/.pyenv/version)
  3.5.0
Soma-Suzuki:~ Soma$ pyenv global 3.5.0
Soma-Suzuki:~ Soma$ pyenv global
3.5.0
Soma-Suzuki:~ Soma$ pyenv versions
  system
  2.7.10
* 3.5.0 (set by /Users/Soma/.pyenv/version)
Soma-Suzuki:~ Soma$ python --version
Python 2.7.10
Soma-Suzuki:~ Soma$ 

これが起こる理由はわかりません。

ご参考までに。 My pythonはこのディレクトリにあります。

Soma-Suzuki:~ Soma$ which python
/usr/bin/python

前もって感謝します。

29
Soma Suzuki

これを試してください:eval "$(pyenv init-)"

例:

$ python -V
Python 2.7.9
mac:~ $ eval "$(pyenv init -)"
mac:~ $ python -V
Python 3.5.0

詳細: https://github.com/yyuu/pyenv

58
Diego Ubirajara

このeval "$(pyenv init -)"を.bash_profileファイル(Macを使用している場合)または.bashrcファイルの1行目に追加するのを忘れていました。

13
alien_frog

この答えは、フィッシュシェルを使用していて、このスレッドを見つけた人のみを対象としています。 Pyenvはシム ref を使用するため、pyenvをフィッシュシェルで動作させるためには、〜/ .config/fish/config.fishファイルを編集して、 $ PATH変数。 config.fishは次のようになります。

### PATH ###
set default_path /usr/local/bin /usr/bin /usr/sbin /bin /sbin
set macports /opt/local/bin
set androiddev ~/Android\ Development/platform-tools/
set rbenv ~/.rbenv/shims/
set pyenv ~/.pyenv/shims/
set anaconda /Users/m4punk/anaconda/bin/
set pg_config /Applications/Postgres.app/Contents/Versions/9.5/bin/


### Virtual Enviroment Wrapper ###

set -g VIRTUALFISH_HOME ~/Documents/Coding/python/virtualenvs
set -g VIRTUALFISH_DEFAULT_PYTHON /usr/local/bin/python3
eval (python -m virtualfish)

### NVM Settings ###
set -g NVM_DIR ~/.nvm

set -gx PATH $pyenv $default_path $macports $androiddev $rbenv $pg_config

setenv EDITOR sublime

ここに関連する行は

set pyenv ~/.pyenv/shims/

そして

set -gx PATH $pyenv $default_path $macports $androiddev $rbenv $pg_config

最初はpyenv shimパスの変数を作成し、2番目はそれをパス変数の前に追加します。保存して閉じるだけで、ターミナルセッションが再開され、設定は完了です。

1
Joe

私は同じ問題に遭遇し、way_pyenv init_にいくつかの変更を加えることになりましたシェルですが、最終的には同じように動作します。 pyenv githubページの guide との唯一の本当の違いは、$(pyenv root)/binディレクトリをパスに追加しなければならなかったことです。

これを行った理由は、eval "$(pyenv init -)"および他のすべての_.bash_profile_作業がローカルシェル環境で実行されるので、シェルの起動時間が長くなるのを避けるためです。ただ明確にします;私の謙虚な意見では、Pyenv自体は悪いシェルエクスペリエンスを作成しませんが、.profile withから初期化するのが好きな独自のバージョン管理システムとツールを持つすべての言語で作業する場合pyenvなど、シェルの初期化プロセスが遅くなる可能性があります。

ここでは、高い視点で自分を設定するために行った手順を示します:

  1. _pyenv init_コマンドのドライランバージョンを実行して、それが何をしたかを確認できるようにします。
  2. PATHおよびシェル環境変数を_.bash_profile_(またはディストリビューションが使用するファイル)に入れます。
  3. 関数_pyenv init_を_.bashrc_に出力し、_.bashrc_から_.bash_profile_を取得します

これはそれを成し遂げる1つの方法ですが、これを「擬似コード」として使用する方が良いでしょう。 _.bash_profile_を、ディストリビューションが好むファイルと交換する必要があります。

_$ pyenv init - # use the output for reference, it doesn't actually do anything
$ cat <<EOBP > ~/.bash_profile
export PYENV_Shell=bash
PATH=$(pyenv root)/shims:$(pyenv root)/bin:$PATH
[ -f  /usr/local/Cellar/pyenv/1.2.9/completions/pyenv.bash ] && . /usr/local/Cellar/pyenv/1.2.9/completions/pyenv.bash
[ -f ~/.bashrc ] && . ~/.bashrc
EOBP
_

次のビットは、上記のステップ1の_pyenv init_ドライランからコピーした新しいロジックでシェルを更新します。

_$ cat <<EORC > ~/.bashrc
# from $(pyenv init -)
pyenv() {
    local command
    command="${1:-}"
    if [ "$#" -gt 0 ]; then
        shift
    fi

    case "$command" in
    rehash|Shell)
        eval "$(pyenv "sh-$command" "$@")";;
    *)
        command pyenv "$command" "$@";;
    esac
}
EORC
_
0
Adam