为python版本抓狂,试下pyenv吧安装pyenv版本切换pyenv-virtualenv小结

写python时,最烦的事莫过于版本切换。python3已经很成熟了,但很多生产项目依然用的是2.7版本,本地环境经常需要切换版本。此外,不同项目的依赖也不同,有时还会造成冲突。这些杂七杂八的问题让初学者很烦躁,pyenv正是解决此类问题的神器。

简单地说,pyenv是python的版本管理工具。能实现如下功能:

  • 安装多个不同版本的python,且彼此独立
  • 便捷地切换版本,可以设置为全局切换,也可以设置某个目录为特定的版本

pyenv

安装pyenv

pyenv源码仓库

以macos为例:

☁  ~  brew install pyenv
☁  ~  pyenv --version
pyenv 1.2.7

初始化pyenv

☁  ~  pyenv init
# Load pyenv automatically by appending
# the following to ~/.zshrc:

eval "$(pyenv init -)"

根据提示,将初始化指令追加到~/.zshrc中(不同的shell配置文件不同)

☁  ~  echo 'eval "$(pyenv init -)"' >> ~/.zshrc

查看有哪些可安装的版本

☁  ~  pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4
  2.4.1
  2.4.2
  2.4.3
  # ...

可用的版本极多,假设我们想要安装3.6系列的版本,可以用grep进行筛选

☁  ~  pyenv install --list | grep 3.6
  3.3.6
  3.6.0
  3.6-dev
  3.6.1
  3.6.2
  3.6.3
  3.6.4
  3.6.5
  3.6.6
  activepython-3.6.0

接下来我们选择用3.6.6版本, 安装的命令很简单:

pyenv install 3.6.6

但你会发现下载安装包的速度极其慢,基于众所周知的原因,直接下载国外源是不可行的。因此需要用以下的国内特色下载方式:

  1. 根据你要下载的版本号,拼接url
https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tar.xz
  1. 用迅雷或其它下载工具下载
  2. 将安装包放到以下目录
☁  ~  mv ~/Downloads/Python-3.6.6.tar.xz ~/.pyenv/cache
  1. 执行安装指令
☁  ~  pyenv install 3.6.6
python-build: use openssl from homebrew
python-build: use readline from homebrew
Installing Python-3.6.6...
python-build: use readline from homebrew
Installed Python-3.6.6 to /Users/senlongzhong/.pyenv/versions/3.6.6
  1. 验证安装

查看已安装的版本

☁  ~  pyenv versions
  system
  3.6.6

版本切换

全局切换

将3.6.6设置为全局使用的版本

☁  ~  pyenv global 3.6.6
☁  ~  pyenv versions
  system
* 3.6.6 (set by /Users/senlongzhong/.pyenv/version)

重启shell, 执行python即可看到已经切换成了3.6.6版本

☁  ~  python
Python 3.6.6 (default, Sep  5 2018, 08:57:22)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

局部切换

除了全局使用,还可以针对某个目录选择特定的版本

按前面的方式安装2.7.14版本

☁  ~  pyenv versions
  system
  2.7.14
* 3.6.6 (set by /Users/long/.pyenv/version)

指定目录切换成2.7.14版本

☁  python  mkdir python2.7
☁  python  cd python2.7
☁  python2.7  pyenv local 2.7.14  # 将python2.7目录设置为2.7.14版本
☁  python2.7  python
Python 2.7.14 (default, Sep  5 2018, 09:12:27)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
☁  python2.7  cd ..
☁  python  python # 其他目录依然使用3.6.6版本
Python 3.6.6 (default, Sep  5 2018, 08:57:22)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

删除版本

☁  ~  pyenv uninstall 3.6.6

pyenv-virtualenv

pyenv已经很强大了,但还不够,如果我们希望每个项目的依赖都是独立的,而不是全部安装在同一版本的python中

就需要用到 pyenv-virtualenv

pyenv-virtualenv是pyenv的一个插件,用于创建指定版本的虚拟环境, github源码

安装

☁  ~  brew install pyenv-virtualenv
☁  ~  echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc

创建虚拟环境

☁  ~  pyenv virtualenv 2.7.14 my-virtual-env-2.7.14

查看现有的虚拟环境

☁  ~  pyenv virtualenvs
  2.7.14/envs/my-virtual-env-2.7.14 (created from /Users/long/.pyenv/versions/2.7.14)
  my-virtual-env-2.7.14 (created from /Users/long/.pyenv/versions/2.7.14)

启用虚拟环境

☁  ~  pyenv activate my-virtual-env-2.7.14
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
(my-virtual-env-2.7.14) ☁  ~  python
Python 2.7.14 (default, Sep  5 2018, 09:12:27)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

virtualenv

退出虚拟环境

(my-virtual-env-2.7.14) ☁  ~  pyenv deactivate
☁  ~  python
Python 3.6.6 (default, Sep  5 2018, 08:57:22)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

删除虚拟环境

最简单粗暴的方式即可:

☁  ~  rm -rf ~/.pyenv/versions/my-virtual-env-2.7.14

小结

pyenv用于管理版本,pyenv-virtualenv用于管理指定版本的虚拟环境。强烈推荐在开发中结合两者来使用,让各个项目独立运行,不会互相干扰。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

SpringBoot开发案例之配置静态资源文件路径

SpringBoot本质上是为微服务而生的,以JAR的形式启动运行,但是有时候静态资源的访问是必不可少的,比如:image、js、css 等资源的访问。

470100
来自专栏SpringBoot 核心技术

SpringCloud组件:搭建Eureka服务注册中心

Eureka服务注册中心是netflix开源组织提供的一个服务高可用的解决方案,在前端时间一直在疯传的2.0开源流产的问题,其实并不影响我们的使用,netfli...

21820
来自专栏JadePeng的技术博客

Spring boot web程序static资源放在jar外部

spring boot程序的static目录默认在resources/static目录, 打包为jar的时候,会把static目录打包进去,这样会存在一些问题:...

36950
来自专栏乐沙弥的世界

CentOS 7下配置本地yum源及yum客户端

Linux下对于软件包的管理使用rpm管理方式。直接使用rpm包管理工具来进行rpm包的安装,升级,卸载时,对于最让人头疼的莫过与包之间的依赖关系。yum作为一...

49740
来自专栏PPV课数据科学社区

【聚焦】企业数据收集网页采集解决方案 附PDF下载

原文:http://www.ppvke.com/Answer/file/download/file_name-5LyB5Lia5pWw5o2u5pS26ZuG6...

38050
来自专栏小巫技术博客

Hello Jenkins

11130
来自专栏技术/开源

开源API测试工具 Hitchhiker v0.7更新 - Schedule的对比diff

Hitchhiker 是一款开源的支持多人协作的 Restful Api 测试工具,支持Schedule, 数据对比,压力测试,支持脚本定制请求,可以轻松部署到...

45360
来自专栏云知识学习

Mount命令详解

首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的。

803150
来自专栏技术/开源

开源API测试工具 Hitchhiker v0.7更新 - Schedule的对比diff

Hitchhiker 是一款开源的支持多人协作的 Restful Api 测试工具,支持Schedule, 数据对比,压力测试,支持脚本定制请求,可以轻松部署到...

30360
来自专栏Java技术分享

J2Cache——Java两级缓存框架

J2Cache 是 OSChina 目前正在使用的两级缓存框架。第一级缓存使用 Ehcache,第二级缓存使用 Redis 。由于大量的缓存读取会导致 L2 的...

47190

扫码关注云+社区

领取腾讯云代金券