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 的完整文档你可以在这里看到:
1
HFcbyqP0iVO5KM05 2018-01-05 09:16:21 +08:00 via Android
已经是我 Python 开发环境下必用的工具
|
2
XIVN1987 2018-01-05 09:23:15 +08:00
virtualenv、pyenv、pipenv,,工具太多,都搞糊涂了,,还是继续用古老的 virtualenv 吧先(╥╯^╰╥)
|
3
qq976739120 2018-01-05 09:25:32 +08:00
推荐 anaconda,简直懒人必备
|
4
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 |
5
est 2018-01-05 09:33:50 +08:00
推荐直接 miniconda3
|
6
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 ``` |
7
Livid MOD OP |
8
onlyice 2018-01-05 09:39:42 +08:00
推荐 anaconda +1,pyenv 是自己下源码编,某些情况下可能不如 anaconda 直接编好的二进制分发
|
9
sikariba 2018-01-05 09:40:26 +08:00
还是 anaconda 爽
|
10
rogwan 2018-01-05 09:48:38 +08:00 via Android
新版 pycharm 里面可以自动设置 pyenv 吗?(默认支持的是 virtualenv )
|
11
javlib 2018-01-05 09:53:04 +08:00 1
分享一个安装方面的技巧:
pyenv install 命令会先去 python 官网下载对应的版本包,然后编译安装。因为网络缘故,在国内下载非常慢,有时候甚至被墙,这时候可以把以前下载的 python 安装包(后缀是'tar.xz')放在$PYENV_ROOT/cache 下,可以跳过下载。 |
12
bomb77 2018-01-05 09:58:47 +08:00 1
@rogwan PERFERENCE 里的 project interpreter 设置成 pyenv 里安装的 python 环境就可以,包括 pyenv virtualenv 也可以
一般类似~/.pyenv/versions/3.6.3/bin/python 这样子 |
15
korvin 2018-01-05 10:17:18 +08:00 1
@javlib 直接用国内的源,速度快的一批,自用科大,我记得 v2 好像也有源
中国科学技术大学: https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/ 清华大学 TUNA: https://pypi.tuna.tsinghua.edu.cn/simple 豆瓣: https://pypi.douban.com/simple |
19
forever139 2018-01-05 10:27:26 +08:00
一直在生产上的 python2 用 pyenv + virtualenv 的插件,这样可以用一个 pyenv 既可以管理不同 python 版本,又可以管理不同虚拟环境。
不知道现在有人在生产上用 python3 的 venv 来管理的吗?也不知道最佳实践是怎样的。 所以我现在生产上的 python3 还是用 pyenv 来管理 |
20
qsnow6 2018-01-05 10:37:05 +08:00
习惯用 pyenv 吧,自带的 venv 没有太多资料,用不习惯
|
22
raysonx 2018-01-05 10:48:41 +08:00
pyenv virtualenv 万年不支持路径中带空格
|
23
mulog 2018-01-05 10:52:53 +08:00
pyenv + virtualenv 插件的确好用 已经成为我的必备工具了
发现有不少好东西都是从 ruby 那边过来的 比如 pyenv <- rbenv |
24
wellsc 2018-01-05 10:53:15 +08:00
virtualenv 足够了
|
25
usenix 2018-01-05 10:54:43 +08:00
刚把 pyenv 卸载了,用上了 pipenv。。。
|
26
flowfire 2018-01-05 11:27:52 +08:00
python 用的不多,是不是类似于 python 版的 nvm。。。
|
27
yanchao7511461 2018-01-05 11:31:25 +08:00
我用 conda
|
29
SuperMild 2018-01-05 11:38:10 +08:00
能用 conda 的解决就尽量用 conda,conda 环境隔离得很彻底,安装库也方便
|
30
okampfer 2018-01-05 11:39:17 +08:00
@Livid 我来一波人脑渲染
`**env`系的工具有: * [rbenv]( https://github.com/rbenv/rbenv) * [nodenv]( https://github.com/nodenv/nodenv) * [goenv]( https://github.com/syndbg/goenv), github 上名字叫 goenv 的好几个 (推荐使用[gvm]( https://github.com/moovweb/gvm)代替) * [jenv]( https://github.com/gcuisinier/jenv) (个人感觉还是用 homebrew/linuxbrew 安装后设定 JAVA_HOME 更方便直接) 个人感觉`**env`系的比`**vm`系的更好用。 |
31
gclove 2018-01-05 11:39:38 +08:00
能用 anaconda 就用 anaconda = = 只会用 conda 和 virtualenv
|
32
okampfer 2018-01-05 11:43:24 +08:00
|
33
Muninn 2018-01-05 11:53:06 +08:00
python3.3 后就自带 pyvenv 了 从那以后我就懒得额外安装 virtualenv 了
|
34
alber1986 2018-01-05 11:54:10 +08:00
python 系列视频教程,学习的来看看
http://www.sucaihuo.com/video/172-0-0 |
35
ClutchBear 2018-01-05 12:13:00 +08:00
pyenv 安装 anaconda 速度慢的话,
可以去官网下载.sh 的安装脚本, 安装完后, 把 anaconda 目录拷贝到 .pyenv/versions 里面 在终端执行一次, pyenv rehash |
37
jowuIM 2018-01-05 12:30:41 +08:00
用过 pyenv 的基本功能,感觉并没有很优秀。
但是有的,用起来就如官方说的命令比较接近 node,也就是习惯 node 的人会比较喜欢 |
38
Anybfans 2018-01-05 13:16:09 +08:00
推荐使用 pipenv 感觉不错~
|
39
yexiaoxing 2018-01-05 13:17:40 +08:00 via iPhone
@korvin 你贴的科大的地址是清华 TUNA 的。科大是这个 http://mirrors.ustc.edu.cn/pypi/
|
40
korvin 2018-01-05 14:03:06 +08:00
|
41
fewtime 2018-01-05 18:44:15 +08:00
现在不是流行用 pipenv 吗
|
42
yexiaoxing 2018-01-05 21:10:39 +08:00 via iPhone
@korvin 反正 tuna 和 ustclug 是一对好基友(
|
43
korvin 2018-01-05 21:20:48 +08:00
|
44
vivisidea 2018-01-05 21:39:14 +08:00
不是直接 docker 走起么:D
|
45
tcitry 2018-01-05 22:39:08 +08:00
还用 virtualenv 的原因是可以直接在项目里打开三方库查看源码。。
|
46
ChangHaoWei 2018-01-06 07:27:51 +08:00
pyenv , pyenv virtualenv,这不是可以一起用?
@tcitry |
47
sunwei0325 2018-01-06 21:41:53 +08:00
我推荐 pipenv 和 virtualenvwrapper
|
48
moogle 2018-01-07 09:48:57 +08:00 via iPhone
pyenv , pyenv virtualenv 我一直搞不明白这两个区别在哪里,什么情况下用哪个?
|
49
Seymer 2018-01-09 16:01:27 +08:00
Mac OS 下安装可能会报错:zipimport.ZipImportError: can't decompress data; zlib not available
目前找到的解决方案是: CFLAGS="-I$(brew --prefix openssl)/include -I$(xcrun --show-sdk-path)/usr/include" \ LDFLAGS="-L$(brew --prefix openssl)/lib" \ pyenv install -v 3.5.0 但是并没有实质性解决问题,安装其他版本仍需上面第一二行,不知道有没有其他方案? 参考链接: https://github.com/pyenv/pyenv/issues/451 https://github.com/pyenv/pyenv/issues/448 |
50
nlimpid 2018-01-11 10:05:12 +08:00
pyenv 我的理解是个 python 版本管理器,它的目的更多的是为了方便测试,比如代码在 2 和 3 的环境运行的结果。而后者其实独立多个项目的 python 环境的作用,每一个新的项目的环境(除了版本,更多的是依赖包)都是独立,并且现在应该都在推 pipenv。
@moogle |
51
xrlin 2018-02-27 16:05:21 +08:00 via iPhone 1
anaconda +1
|
52
Mark24 2020-04-08 16:30:13 +08:00
|