Python中如何使用pyenv同时管理两个版本的Python?
这需求遇到好几次了,就是我想执行如下两个命令:
- python xxx
- python3 yyy
第一个用 2.7 执行,第二个用 3.7 执行。
但如果我设置pyenv local 2.7.10后,再执行python3 yyy的时候,会出现这种错误:
$ python3 yyy
pyenv: python3: command not found
The `python3’ command exists in these Python versions:
3.7.0
必须要切换到 3.7.0,才能执行。但下次执行python xxx的时候又得切换回去……有方法可以同时使用多个版本的 python 么?不用切换就执行能执行三条命令:python3.7.0 xxx、python3.6.5 yyy、python2.7.10 zzz?
ps. 其实平时工作里基本用不到 python2 了,不过 npm 装东西的时候要用,否则就失败……这问题不知道有没有解决方案?为啥 npm 装东西的时候可能用到 python2 ?
Python中如何使用pyenv同时管理两个版本的Python?
LZ 要不要考虑用 Pycharm?
不管你装多少个 Python,Pycharm 都可以根据 Project 选择 Python Interpreter
用pyenv管理多个Python版本很简单,核心就是安装、切换和设置项目专属版本。
首先,确保系统已安装pyenv。如果还没装,用Homebrew(macOS)或pyenv-installer(Linux)装一下。装好后,在shell配置文件(比如.bashrc或.zshrc)里加上这几行,然后重启终端:
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)" # 如果想用虚拟环境就加上
接着,安装你需要的Python版本。比如要装3.8.10和3.9.5:
pyenv install 3.8.10
pyenv install 3.9.5
装好后,pyenv versions命令能看到所有已安装的版本,当前全局版本前会有个星号。
管理版本主要用这三个命令:
- 全局设置:
pyenv global 3.9.5把3.9.5设成默认版本。 - 临时切换:
pyenv shell 3.8.10只在当前终端会话里用3.8.10。 - 项目专属:在项目根目录执行
pyenv local 3.8.10,这会生成一个.python-version文件。以后进这个目录,pyenv会自动切换到3.8.10,不影响其他项目。
这样就能在系统里随意切换不同Python版本了。一个项目一个版本,互不干扰。
总结:装好版本后用global、shell、local命令在不同层级切换。
py 命令
py -2.7 --version
py -3.7 --version
在 venv 里也能直接调用外面的 python 版本
不过好像是 windows 独有的…
是 Windows 独有的。
遇到问题先看文档:
https://github.com/pyenv/pyenv/blob/master/README.md#choosing-the-python-version
pyenv 是支持激活多个 Python 版本的,例如:
pyenv local 2.7.10 3.6.5 3.7.0
4 楼正解
NPM 用到的是 https://github.com/nodejs/node-gyp 吧,我記得 Python 3 也支持的
额…没用过 pyenv,直接软链 py3 跑了
rbenv
ndenv
goenv
现在有 pyenv 了么…
读文档的成本有点高,因为不知道文档里是否有写。不着急的情况下我就喜欢来这问一下,感谢师傅。
有的,并且推荐使用
记得继承了 vir 那一套
pyenv virtualenv 搭配来一下多好,不同需求的应用不同独立虚拟版本环境。
“读文档成本有点高”?,这年头都开始流行拿到手开箱闷头直接就是干,而根本不读说明书的么?
就不怕大力出奇迹,不,烧掉厨房嘛?(笑)
pyenv 出来有年头了,
本节点 /go/python 右侧的 “值得关注的项目” 下列表里 pyenv 和 virtualenv 是赫然在列,并紧邻的。
我觉得有价值的才会去花时间,比如 django,上个月才读文档读出了一个 CVE。这个你不用质疑我,行事风格不一样而已。
软链接到不同版本即可
如果你用 Gentoo (Prefix) 的话可以直接前面加个环境变量解决,
比如
$ EPYTHON=python2.7 <program>
目前还没见到解决的比这个更好的……
FYI:
[1] https://wiki.gentoo.org/wiki/Project:Python/python-exec#Local_implementation_overrides
[2] https://wiki.gentoo.org/wiki/Project:Prefix#Developer_platforms


