前言

需求

在日常开发的过程中经常会遇到以下场景:

系统预装Python是2.6,项目需要Python2.7中的新特性

由于python的版本割裂, Python3 和 Python2想要共存

不通项目对于同一个依赖包的版本要求不同,希望基于项目的环境独立

virtualenv, virtualenvwrapper等工具解决了上述问题中一的部分,也有着自身局限和不够优雅的地方,例如,将不同的 $PATH 植入不同的shell这种高耦合的工作方式。

本篇的主题pyenv可以帮助你以更pythonic的方式管理多个版本python,创建和维护不同的虚拟环境, 并提供方便的切换方法。 pyenv受启发于ruby环境管理工具rbenv

原理

pyenv在$PATH的最前面插入了一个垫片路径(shims):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin。所有对 Python 可执行文件的查找都会首先被这个 shims 路径截获,从而架空了后面的系统路径。

安装

安装包依赖(编译python)

Debian/Ubuntu

apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils

macOS

brew install openssl readline xz

CentOS/Fedora

yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel

安装pyenv

1. 获取源文件

安装工具(推荐)

macOS

brew update && brew install pyenv

Linux

curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

手动

选择安装到$HOME/.pyenv目录(但你可以在某处安装其他)。

$ cd && git clone git://github.com/yyuu/pyenv.git .pyenv

2. 配置环境变量

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile

echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile

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

shell 配置文件(~/.bash_profile)依不同 Linux 而需作修改

~/.bash_profile (General)

~/.zshenv (Zsh)

~/.bashrc (Ubuntu)

3. 重启shell生效

exec $SHELL

使用

安装/卸载某个版本的python

可以先查看一下有哪些版本的python 可以安装

pyenv install --list

Available versions:

2.1.3

2.2.3

2.3.7

2.4

...

2.7.12

安装

安装文件很大, 如果由于网络的问题,总是连接中断或者下载很久导致安装失败。此时可以先从官方网站下载安装包,然后放在$PYENV_ROOT/cache文件夹中(该目录默认不存在,用户要自行新建),注意,从官网下载的文件后缀名需要由xxx.tgz改为xxx.tar.gz。然后在pyenv install 此版本,pyenv会自动先从此文件夹中搜索

pyenv install -v 2.7.1

卸载

pyenv uninstall 2.7.1

显示已安装python版本

*表示当前的python版本

system 代表当前系统的python版本

pyenv versions

system (set by /root/.pyenv/version)

2.5.6

2.6.8

*3.3.3

jython-2.5.3

pypy-2.2.1

不同版本的python切换

pyenv global

设置全局的 Python 版本,通过将版本号写入 ~/.pyenv/version 文件的方式。

pyenv global 3.4.0 ( ~/.pyenv/version )

pyenv local

设置面向程序的本地版本,通过将版本号写入当前目录下的 .python-version 文件的方式。通过这种方式设置的 Python 版本优先级较 global 高。pyenv 会从当前目录开始向上逐级查找 .python-version 文件,直到根目录为止。若找不到,就用 global 版本。

pyenv local 2.7.3 ( /usrl/local/project/.python-version )

pyenv shell

设置面向 shell 的 Python 版本,通过设置当前 shell 的 PYENV_VERSION 环境变量的方式。这个版本的优先级比 local 和 global 都要高。--unset 参数可以用于取消当前 shell 设定的版本。

pyenv shell pypy-2.2.1 ( $PYENV_VERSION )

pyenv shell --unset

切换后python版本确认

$ python -V

Python 2.7.10

显示当前pyenv使用的环境

$ pyenv version

三种可能的输出

system (set by /usr/local/var/pyenv/version) # global

2.7.11 (set by /usrl/local/project/.python-version) # local

3.5.2 (set by PYENV_VERSION environment variable) # shell

pyenv-virtualenv 维护虚拟环境

pyenv virtualenv是pyenv的插件,为Linux系统上的Python virtualenvs提供pyenv virtualenv命令。使用起来非常直观简单

配置

目前pyenv-virtualenv已经包含在pyenv插件中, 无需手动安装,可以直接使用。需要注意的是需要执行如下命令,使配置生效

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

source ~/.bash_profile

创建/删除虚拟环境

pyenv virtualenv orignal-version target-name

pyenv virtualenv 3.5.2 env352

pyenv virtualenv-delete env352

上面创建了一个名为env352 的python虚拟环境,这个环境的真实目录位于:~/.pyenv/versions/

切换python虚拟环境

切换的命令和virtualenv基本保持一致

pyenv activate env352

pyenv deactivate

python虚拟环境 pyenv_Python多版本管理和虚拟环境维护(pyenv, pyenv-virtualenv)相关推荐

  1. python搭建环境是什么_python虚拟环境是什么?python虚拟环境的介绍

    本篇文章给大家带来的内容是关于python虚拟环境是什么?python虚拟环境的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 什么是Python的虚拟环境 记得在学校写代码的时 ...

  2. python学习总结----时间模块 and 虚拟环境(了解)

    python学习总结----时间模块 and 虚拟环境(了解) time- sleep:休眠指定的秒数(可以是小数) - time:获取时间戳# 获取时间戳(从1970-01-01 00:00:00到 ...

  3. 快速运行python虚拟环境_快速入门Python 最新最流行的pipenv虚拟环境

    2018的PyCon把最新型最先进的Python虚拟环境pipenv吵得火热.看了下介绍感觉真的很好用,它在virtualenv的基础上包装了一些更便捷的功能,解决了很多很多virtualenv欠缺的 ...

  4. 【Python配置】使用pyenv与virtualenv搭建单机多版本python多虚拟环境开发

    用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境 pyenv可以帮助你在一台开发机上建立多个版本的python环境, 并提供方便的切换方法. virtualenv则提供 ...

  5. python虚拟环境管理 —— 以 workon 切换虚拟环境

    python虚拟环境管理 Linux Windows Linux 1.安装 virtualenvwrapper $ pip3 install virtualenvwrapper 2.创建目录存放虚拟环 ...

  6. Python自学成才之路 玩转虚拟环境

    Python自带的那个环境是系统环境,同一个项目的不同版本可能会依赖不同版本的依赖包,如果都放在系统环境下会使系统环境变得很庞大,同时操作起来也不太方便,如果给每个项目都单独配置一个环境,各个项目之间 ...

  7. 激活conda虚拟环境后,无法调用虚拟环境中的python版本(或无法调用当前虚拟环境的包)

    今天使用conda创建了一个新环境(python3.8),命名为wj: (base) [root@cqu-3 ~]# conda env list # conda environments: # ba ...

  8. 使用python虚拟环境,为什么要激活虚拟环境

    文章目录 使用python虚拟环境,为什么要激活虚拟环境 前置基础 python 模块和包的概念 Python 模块 (Module) Python中的包 python依赖引入机制(搜索路径).PYT ...

  9. Python直接复制已有的venv虚拟环境以创建新的虚拟环境

    Python venv创建的虚拟环境复制到其他路径,如何断开与原始虚拟环境的连接,成为一个全新的虚拟环境,且两个虚拟环境之间的更新互不影响? 1.软件环境⚙️ 2.问题描述

  10. 怎么进入python 的venv文件夹_python虚拟环境模块venv使用及示例

    相信只要学习python的同学对于虚拟环境这个概念肯定不会太陌生,虚拟环境指的是一个个单独隔离的python开发环境.各个虚拟环境之间互不干扰,都有自己独立的开发包.就像是在电脑上装了很多个虚拟机,每 ...

最新文章

  1. 黄聪:PHP生成折线图、饼图、表格、图表插件控件pChart
  2. 将DataTable中的数据一次性提交到数据库中
  3. 大数据入门基础教程系列
  4. IOS atomic与nonatomic,assign,copy与retain的定义和区别
  5. 沙漠上不小心挖了个洞,让这个地狱之门般的巨坑,燃烧了50年
  6. nios ii小实验——第一个demo指导书
  7. 年初新立Flag,新华三解决方案部做了点儿啥?
  8. 关于ibatis.net框架(NPetshop学习)
  9. OpenGL基础25:多光源(附简单GLSL配置)
  10. linux启动http服务
  11. pom文件导入maven依赖
  12. matlab中的多行注释
  13. TA_Lib库指标中文说明
  14. Ogre 天龙八部地形管理器(2) --- 地形和静态对象的加载
  15. STM32-端口复用和重映射
  16. 云计算设计模式翻译(五):Compute Resource Consolidation Pattern
  17. 西雅图Oracle公寓租赁,在西雅图租房必须知道的那些事
  18. 抖音和tiktok是什么关系?TikTok和抖音差别大吗?
  19. 哥白尼气候数据ERA5数据集——大气数据研究
  20. JAVA小项目(1)——租车系统

热门文章

  1. 【BIEE】17_仪表盘提示中值按顺序显示
  2. web测试实践作业进度报告三
  3. 《Ansible权威指南 》一1.6 Ansible应用场景
  4. HTTP GET请求URL中IP被异常替换的问题
  5. linux下绘图工具dia,功能强劲直逼visio - 潜入技术的海洋 - 51CTO技术博客
  6. 杜拉拉升职记摘录:早日实现退休理想--你需要眼光和资格
  7. 蓝桥杯 振兴中华——2013年省赛C/C++ A组真题3
  8. 随机森林的基分类器可否由决策树替换为线性分类器或者K-NN?
  9. 行军导航过程中导向箭头
  10. java严格模式_es严格模式、对象和扩展。