当前位置:首页>python>pyenv,一个纯shell脚本写的Python版本管理工具,让你轻松在不同版本之间切来切去

pyenv,一个纯shell脚本写的Python版本管理工具,让你轻松在不同版本之间切来切去

  • 2026-10-11 08:15:23
pyenv,一个纯shell脚本写的Python版本管理工具,让你轻松在不同版本之间切来切去

说实话,搞Python开发最烦什么?不是写bug,是版本打架。

你想想,系统自带的可能是Python 2.7,项目A要用3.8,项目B死活得跑3.10,还有个老项目卡在3.6……再加上venv、conda一通折腾,有时候自己都忘了当前用的到底是哪个版本。pip装个包,装完发现跑不起来,一查——装到系统Python里去了。这种情况,我猜你也遇到过。

后来我发现了pyenv,一个纯shell脚本写的Python版本管理工具。不是什么大框架,就干一件事:让你轻松在不同Python版本之间切来切去。而且它不依赖Python本身——这点很关键,不像某些工具,你要先装Python才能用它们装Python,这不是套娃吗?

它能做什么?

说白了就三招:

  • • 全局切换:比如你平时用3.10.4,一条pyenv global 3.10.4搞定,以后打开终端默认就是它。
  • • 项目级切换:进到项目文件夹,运行pyenv local 3.8.12,目录下自动生成一个.python-version文件。下次cd进来,Python自动切到3.8。再也不用在脑子里记“哪个项目用哪个版本”了。
  • • 临时覆盖:当前终端会话想换个版本试试?pyenv shell 3.11.0,只在这一个窗口生效。

还有个玩法:你可以同时指定多个版本,比如pyenv global 3.10 3.9 2.7,然后直接运行python3.10、python3.9、python2.7,互不干扰。配合tox做多版本测试,舒服得一批。

怎么装?别怕,很简单

Mac用户一把梭:

brew install pyenv

Linux/Unix用户用自动安装脚本:

curl https://pyenv.run | bash

然后往你的~/.bashrc或~/.zshrc里加三行:

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

重启终端,完事儿。

Windows用户也别慌,有个pyenv-win的移植版,或者用WSL,一样跑。

日常怎么用?

举个例子,你想装Python 3.10.4:

pyenv install 3.10.4

装完看看有哪些版本:

pyenv versions

想切换到刚装的版本:

pyenv global 3.10.4

哪天不想要了:

pyenv uninstall 3.10.4

就这么简单。

说点实在的

我之前也试过pythonbrew、pythonz,但pyenv最让我安心的是——它从不乱改你的shell。它只是在PATH前面插了一个自己的“替身目录”(叫shims),你敲python的时候,实际敲的是这个替身,替身再根据当前目录的.python-version或者环境变量,把命令转给真正的Python。

这种设计很Unix哲学:每个工具只做一件事,做好了就拼在一起。所以pyenv跟virtualenv、pipenv、poetry都不冲突。你甚至可以装个pyenv-virtualenv插件,让pyenv直接替你管理虚拟环境。

当然也有小坑。比如某些系统自带的PATH设置顺序会导致pyenv不生效,这时候把eval "$(pyenv init --path)"加到~/.profile里就好。还有,如果你是折腾型选手,不想要shims,也能用pyenv exec直接调用——不过大多数人用默认配置就足够了。

总结一下

pyenv不是什么黑科技,没有花哨的界面,就是命令行里踏踏实实帮你管Python版本。但正是这种踏实,让我从“版本混乱”的泥坑里爬了出来。如果你也被Python版本折腾得够呛,花十分钟试试pyenv,大概率就回不去了。

项目地址:https://github.com/pyenv/pyenv

最新文章

随机文章