pyenv 入门介绍

2018-01-05 09:05:05 +08:00
 Livid

pyenv

pyenv 可以帮助你在开发或者生产环境里安装和管理多个 Python 版本。这对于 Python 开发者而言非常有用。

比如在 Ubuntu 12.04 上(这个版本的 Ubuntu 曾经非常流行,至今仍然驱动了很多重要系统),系统自带的 Python 版本是 2.7.6。而这个版本的 Python 缺乏对一个重要的 SSL 功能的支持—— Server Name Indication,简称 SNI。这样当你在使用如 requests 这样的 HTTP 库访问一些 HTTPS API 时,就会遇到证书错误。

对 SNI 的支持是在 Python 2.7.9 时从 Python 3 里 backport 过来的。而借助 pyenv,我们就可以在一些非常古老或者不方便升级 Python 版本的系统里用上最新版本的 Python,同时完全不会影响到系统自带的 Python 版本。

这是在 Ubuntu Linux 上使用 pyenv 安装 Python 2.7.14 (本文写作时 Python 2 的最新版本)的步骤:

首先安装一些必要的工具和支持库:

sudo apt-get install git build-essential libreadline-dev libsqlite3-dev libbz2-dev libssl-dev zlib1g-dev

然后获得 pyenv 的最新版本:

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

然后在 .bashrc 中添加三行指令,让系统可以找到 pyenv 安装的 Python:

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc

之后你需要重启你的 shell 来让上面添加的 3 条指令生效。你可以登出再登录,或者简单的执行下面这个指令:

exec $SHELL

然后就可以用 pyenv 安装你需要的任何 Python 版本了,比如 2.7.14:

pyenv install 2.7.14

安装完成之后,你可以通过这条指令查看目前系统里所有的 Python 版本:

pyenv versions

你可以把某个版本设置为全局使用:

pyenv global 2.7.14

或是只对当前所在目录生效:

pyenv local 2.7.14

如果是设置为只对当前目录有效,那么在当前目录下会产生一个名为 .python-version 的文件,其中的内容是版本号。pyenv 就是根据这个文件的内容来确定当前目录应该使用哪个版本的 Python。

关于 pyenv 的完整文档你可以在这里看到:

https://github.com/pyenv/pyenv

24057 次点击
所在节点    Python
52 条回复
HFcbyqP0iVO5KM05
2018-01-05 09:16:21 +08:00
已经是我 Python 开发环境下必用的工具
XIVN1987
2018-01-05 09:23:15 +08:00
virtualenv、pyenv、pipenv,,工具太多,都搞糊涂了,,还是继续用古老的 virtualenv 吧先(╥╯^╰╥)
qq976739120
2018-01-05 09:25:32 +08:00
推荐 anaconda,简直懒人必备
mimzy
2018-01-05 09:32:44 +08:00
配合 https://github.com/pyenv/pyenv-virtualenv 风味更佳

解决阿里云 pyenv 无法下载的问题 /t/256328

@qq976739120 #3 pyenv install anaconda3-5.0.1
est
2018-01-05 09:33:50 +08:00
推荐直接 miniconda3
quinoa42
2018-01-05 09:36:07 +08:00
再安利下 neovim 调用 pyenv: https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim
我的相关配置:
```
if has("nvim")
let g:python_host_prog = $HOME . "/.pyenv/versions/neovim2/bin/python"
let g:python3_host_prog = $HOME . "/.pyenv/versions/neovim3/bin/python"
endif
```

```
" use flake8 installed at the virtualenv for neovim
let g:ale_python_flake8_executable = $HOME . "/.pyenv/versions/neovim3/bin/flake8"
let g:ale_python_flake8_use_global = 1
" use yapf installed at the virtualenv for neovim
let g:ale_python_yapf_executable = $HOME . "/.pyenv/versions/neovim3/bin/yapf"
let g:ale_python_yapf_use_global = 1
" use isort installed at the virtualenv for neovim
let g:ale_python_isort_executable = $HOME . "/.pyenv/versions/neovim3/bin/isort"
let g:ale_python_isort_use_global = 1
```
Livid
2018-01-05 09:37:19 +08:00
@quinoa42 抱歉目前回复里暂时还不能渲染 Markdown。这个我们会尽快支持的。

不过相信这里很多人都已经有人脑渲染 MD 的能力了。
onlyice
2018-01-05 09:39:42 +08:00
推荐 anaconda +1,pyenv 是自己下源码编,某些情况下可能不如 anaconda 直接编好的二进制分发
sikariba
2018-01-05 09:40:26 +08:00
还是 anaconda 爽
rogwan
2018-01-05 09:48:38 +08:00
新版 pycharm 里面可以自动设置 pyenv 吗?(默认支持的是 virtualenv )
javlib
2018-01-05 09:53:04 +08:00
分享一个安装方面的技巧:
pyenv install 命令会先去 python 官网下载对应的版本包,然后编译安装。因为网络缘故,在国内下载非常慢,有时候甚至被墙,这时候可以把以前下载的 python 安装包(后缀是'tar.xz')放在$PYENV_ROOT/cache 下,可以跳过下载。
bomb77
2018-01-05 09:58:47 +08:00
@rogwan PERFERENCE 里的 project interpreter 设置成 pyenv 里安装的 python 环境就可以,包括 pyenv virtualenv 也可以
一般类似~/.pyenv/versions/3.6.3/bin/python 这样子
rogwan
2018-01-05 10:07:41 +08:00
@bomb77 好的,谢谢
rogwan
2018-01-05 10:10:43 +08:00
@javlib 这个很重要啊,用 pip 安装都是选国内清华或豆瓣的源,否则大点的包根本安装不上
korvin
2018-01-05 10:17:18 +08:00
@javlib 直接用国内的源,速度快的一批,自用科大,我记得 v2 好像也有源
中国科学技术大学: https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/
清华大学 TUNA: https://pypi.tuna.tsinghua.edu.cn/simple
豆瓣: https://pypi.douban.com/simple
rogwan
2018-01-05 10:19:13 +08:00
@korvin 科大的地址是不是粘错了?
korvin
2018-01-05 10:19:48 +08:00
@korvin
@javlib 貌似回复错了,你说的是 pyenv install,我回了个 pip install
korvin
2018-01-05 10:20:42 +08:00
@rogwan 没有错,我自己在用,而且点击打开的页面也没错
forever139
2018-01-05 10:27:26 +08:00
一直在生产上的 python2 用 pyenv + virtualenv 的插件,这样可以用一个 pyenv 既可以管理不同 python 版本,又可以管理不同虚拟环境。
不知道现在有人在生产上用 python3 的 venv 来管理的吗?也不知道最佳实践是怎样的。
所以我现在生产上的 python3 还是用 pyenv 来管理
qsnow6
2018-01-05 10:37:05 +08:00
习惯用 pyenv 吧,自带的 venv 没有太多资料,用不习惯

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/420216

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX