我想用pyenv来切换python2和python3.
我用以下代码成功下载了python2和python3以及pyenv.
brew install pyenv
brew install pyenv-virtualenv
pyenv install 2.7.10
pyenv install 3.5.0
Run Code Online (Sandbox Code Playgroud)
但是,我无法从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$
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会这样.
供您参考.我的python在这个目录中.
Soma-Suzuki:~ Soma$ which python
/usr/bin/python
Run Code Online (Sandbox Code Playgroud)
先感谢您.
小智 62
试试这个:eval"$(pyenv init - )"
例:
$ python -V
Python 2.7.9
mac:~ $ eval "$(pyenv init -)"
mac:~ $ python -V
Python 3.5.0
Run Code Online (Sandbox Code Playgroud)
更多信息:https: //github.com/yyuu/pyenv
unt*_*air 59
[2021 年 7 月]
如果您在运行时看到此消息eval "$(pyenv init -)"
WARNING: `pyenv init -` no longer sets PATH.
Run `pyenv init` to see the necessary changes to make to your configuration.
Run Code Online (Sandbox Code Playgroud)
您应该pyenv init按照警告的说明检查消息,但简而言之,您可以eval "$(pyenv init --path)"改用。
如有必要~/.bash_profile,请不要忘记相应地更新您的,~/.zshrc或类似内容。
小智 23
我在运行 Monterey 的 Apple M1 MacBook Pro 上遇到了同样的问题,并在 Rosetta 仿真终端上安装了 Pyenv。
我的解决方案是将以下内容添加到我的 ~/.zshrc 文件中:
eval "$(pyenv init -)"
eval "$(pyenv init --path)"
Run Code Online (Sandbox Code Playgroud)
我没有向 ~/.zprofile 添加任何内容。
我现在可以看到版本按预期切换。
小智 22
MacOSX 10.15.17
vim ~/.zshrc
Run Code Online (Sandbox Code Playgroud)
添加或更新
eval "$(pyenv init --path)"
Run Code Online (Sandbox Code Playgroud)
然后运行
source ~/.zshrc
pyenv global 3.7.0
Run Code Online (Sandbox Code Playgroud)
终于跑了
python -V
Python 3.7.0 (default, Dec 12 2021, 13:40:24)
Run Code Online (Sandbox Code Playgroud)
cri*_*fan 13
2021092610.15.72.0.7eval "$(pyenv init --path)"
Run Code Online (Sandbox Code Playgroud)
如果你想在Mac启动后自动生效,那么将其添加到你的启动脚本中
这里我的是 zsh,所以:
vi ~/.zshrc
Run Code Online (Sandbox Code Playgroud)
添加
eval "$(pyenv init --path)"
完毕。
Pow*_*ers 10
这是了解 pyenv 底层工作原理的绝佳机会。
该pyenv global命令只是读取/Users/Soma/.pyenv/version目录中的数据。它与cat /Users/Soma/.pyenv/version.
该pyenv versions命令只是检查层次结构并选择正确的 Python 版本,以便在运行“垫片可拦截”命令(如python或pip)时使用。
当您运行时pyenv global 3.5.0,/Users/Soma/.pyenv/version文件会更新为包含“3.5.0”。这是 pyenv 所做的唯一更改。大多数用户都惊讶于pyenv global 3.5.0只更改了文本文件中的一行!
当您运行 时python --version,您的终端将执行与执行任何 shell 命令时相同的步骤:它遍历您的每个目录PATH并查找名为 的第一个可执行文件python。
如果你输入echo $PATH,你会得到这样的东西:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
您的机器正在目录中查找python可执行文件/usr/bin。
您可以将此代码添加到您的~/.bash_profile文件中以更改您的 PATH。
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
Run Code Online (Sandbox Code Playgroud)
重新启动终端,echo $PATH再次运行,您现在将看到如下输出:/Users/Soma/.pyenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
请注意该/Users/Soma/.pyenv/shims目录在PATHnow开头的位置。当您运行python --version现在,该命令将被处理python执行。在这/Users/Soma/.pyenv/shims。该命令将没有机会被拿起,/usr/bin/python因为它会/Users/Soma/.pyenv/shims/python首先被抓住。
我明白为什么这个错误会让你感到困惑。除非您知道pyenv是如何工作的,否则很难调试它。
运行pyenv init并按照它告诉你的去做。
对我来说,解决方案是将以下内容添加到.profile:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
Run Code Online (Sandbox Code Playgroud)
还将这一行添加到.bashrc:
eval "$(pyenv init -)"
Run Code Online (Sandbox Code Playgroud)
不要忘记重新启动 shell。(关闭并重新打开或exec "$SHELL")
[ 2021 年 11 月 ]
这就是我在 Mac OSX 上使用 ZSH 解决问题的方法。pyenv 在解释需要添加到 zsh 配置中的内容方面做得很糟糕。$PYENV_ROOT 未定义。顺序很重要。
将其添加到 ~/.zshrc 配置顶部附近:
export PATH="$HOME/.pyenv/bin:$PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH"
PYENV_ROOT=$(pyenv root)
Run Code Online (Sandbox Code Playgroud)
在 Mac OS 的终端中运行eval "$(pyenv init -)"(注意引号),将 Pyenv shims 目录添加到 PATH。然后再次运行pyenv global 3.5.0并检查python3 --version。
python仅供参考,如果您的可执行文件被发现早于 pyenv 的 shim 位置,那么当您在 shell 中键入时,您将无法更改 python 版本。
要正确使用 pyenv,shim 目录应该是 PATH 变量中的第一个目录。例如,
如果你的路径看起来像
/usr/bin:/home/kenobi/.pyenv/shims:...
Run Code Online (Sandbox Code Playgroud)
如果你有一个 python 可执行文件/usr/bin,你将无法正确使用 pyenv。~/.bashrc你应该像下面这样安排你的 PATH 配置
/home/kenobi/.pyenv/shims:/usr/bin:...
Run Code Online (Sandbox Code Playgroud)
然后重新启动你的 shell 就可以了。对我来说,我的心里有这些台词~/.zshrc
# PyEnv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH" # This line was causing the problem
eval "$(pyenv init --path)"
# Docker
export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我在export PATH=/usr/bin:$PATHpyenv 配置行之后。然后我通过切换块解决了这个问题,如下所示
# Docker
export PATH=/usr/bin:$PATH # Not a problem anymore.
export DOCKER_HOST=unix:///run/user/1000/docker.sock
# PyEnv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
Run Code Online (Sandbox Code Playgroud)
在 ubuntu 中, ~/ .bashrc文件需要更新并更改eval "$(pyenv init -)" 为 eval "$(pyenv init --path)"
检查你的PATH。不知怎的.pyenv/bin,当它应该是的时候,我已经做到了.pyenv/shims。
export PATH="$HOME/.pyenv/shims:$PATH"使用(并添加到 zshrc 等)修复路径。
对我来说,这在通过 Homebrew 安装后使用 ZSH 在 MacOS 上工作:
echo 'eval "$(pyenv init --path)"' >> ~/.zprofile
Run Code Online (Sandbox Code Playgroud)
我最初有eval "$(pyenv init -)"我的~/.zshrc文件,但这似乎不起作用。遵循本指南后:https : //github.com/pyenv/pyenv#basic-github-checkout我eval从.zshrc文件中删除了调用,并.zprofile使用上述命令将其添加到文件中,重新启动终端后一切正常。
运行后,brew install pyenv最好从pyenvgithub README 中参考有关设置 shell 环境的 OG 文档:
https://github.com/pyenv/pyenv#set-up-your-shell-environment-for-pyenv
从版本 2.3.0 和 zsh 开始,应运行以下命令
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
Run Code Online (Sandbox Code Playgroud)