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

23652 次点击
所在节点    Python
52 条回复
dreampuf
2018-01-05 10:44:58 +08:00
推荐 pyenv + pyenv-virtualenv
pyenv-virtualenv 是集成了 virtualenv 的 pyenv,使得可以 通过 pyenv local INSTANCE_NAME 指定 virtualenv 的环境
raysonx
2018-01-05 10:48:41 +08:00
pyenv virtualenv 万年不支持路径中带空格
mulog
2018-01-05 10:52:53 +08:00
pyenv + virtualenv 插件的确好用 已经成为我的必备工具了
发现有不少好东西都是从 ruby 那边过来的 比如 pyenv <- rbenv
wellsc
2018-01-05 10:53:15 +08:00
virtualenv 足够了
usenix
2018-01-05 10:54:43 +08:00
刚把 pyenv 卸载了,用上了 pipenv。。。
flowfire
2018-01-05 11:27:52 +08:00
python 用的不多,是不是类似于 python 版的 nvm。。。
yanchao7511461
2018-01-05 11:31:25 +08:00
我用 conda
duoglas
2018-01-05 11:35:12 +08:00
@Livid 咋知道我们已经有人脑渲染的能力了 这么隐秘的事情竟然被你发现了
SuperMild
2018-01-05 11:38:10 +08:00
能用 conda 的解决就尽量用 conda,conda 环境隔离得很彻底,安装库也方便
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`系的更好用。
gclove
2018-01-05 11:39:38 +08:00
能用 anaconda 就用 anaconda = = 只会用 conda 和 virtualenv
okampfer
2018-01-05 11:43:24 +08:00
@usenix pipenv 是跟 pipfile 配合使用而且目的跟 pyenv 不一样,前者管理 python 项目依赖,后者管理 python 版本。


@SuperMild anaconda 体积太大。。。公司电脑 SSD 太小伤不起,miniconda 感觉也不小啊。。。
Muninn
2018-01-05 11:53:06 +08:00
python3.3 后就自带 pyvenv 了 从那以后我就懒得额外安装 virtualenv 了
alber1986
2018-01-05 11:54:10 +08:00
python 系列视频教程,学习的来看看
http://www.sucaihuo.com/video/172-0-0
ClutchBear
2018-01-05 12:13:00 +08:00
pyenv 安装 anaconda 速度慢的话,
可以去官网下载.sh 的安装脚本,
安装完后, 把 anaconda 目录拷贝到 .pyenv/versions 里面
在终端执行一次, pyenv rehash
emdoe
2018-01-05 12:30:36 +08:00
@Livid 有没有推荐的插件可以帮助人脑渲染增加 highlight 功能的说 :-D
jowuIM
2018-01-05 12:30:41 +08:00
用过 pyenv 的基本功能,感觉并没有很优秀。
但是有的,用起来就如官方说的命令比较接近 node,也就是习惯 node 的人会比较喜欢
Anybfans
2018-01-05 13:16:09 +08:00
推荐使用 pipenv 感觉不错~
yexiaoxing
2018-01-05 13:17:40 +08:00
@korvin 你贴的科大的地址是清华 TUNA 的。科大是这个 http://mirrors.ustc.edu.cn/pypi/
korvin
2018-01-05 14:03:06 +08:00
@yexiaoxing 用了这么久我竟然没发现写错了
不过科大的最终 pip 可用地址应该是 https://mirrors.ustc.edu.cn/pypi/web/simple/

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

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

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

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

© 2021 V2EX