本篇文章主要围绕PyenvVirtualenvVirtualenvwrapper三个Python库展开讨论。

熟悉Python的朋友一定知道python虚拟环境, 它可以让我们在不同项目中拥有各自独立的依赖库空间, 从而保证各个项目的干净整洁,而笔者在工作中需要负责多个项目,因为历史原因有的项目还在使用python2系列的版本,有的则使用python3系列的版本。所以我需要一种方式可以在同一台电脑上可以安装多个不同版本的python来适应我的工作需求,那么pyenv就是我理想的管理工具。

Pyenv 简介

pyenv是一个python版本管理工具,可以方便用户在不同的python版本间切换,例如我电脑上已经安装了python2.7,我还想安装python3.7和3.8,那么通过pyenv可以非常方便的实现这种需求。

pyenv的作者是一位日本人,据说因为他本人不喜欢window平台, 故pyenv只支持linux系和mac平台, 不光现在不支持windows以后也不支持,所以在windows上开发的小伙伴无福消受了。

Pyenv官网: https://github.com/pyenv/pyenv

Pyenv安装

以下案例是在Centos6.7 x64系统中操作。

一. 安装git

yum install git -y

二. 安装Python 编译依赖

yum -y install gcc make patch gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel

三. 创建用户Python

$ useradd python$ echo python | passwd python --stdin

四. 使用python用户登录后安装Pyenv

$ su python

在线安装:

我们可以直接通过pyenv-installer插件来安装, PS: 在 https://github.com/pyenv/pyenv-installer 有安装文档,下载的 pyenv-installer 是一个shell脚本。

$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
这里需要注意:如果curl出现 curl: (35) SSL connect error ,这是nss版本低导致的问题,可以配置一个有较新包的yum源, 然后更新nss
$ vi /etc/yum.repos.d/Centos-6.repo[updates]name=CentOS-Updatesbaseurl=https://mirrors.aliyun.com/centos/6/os/x86_64gpgcheck=0

$ yum update nss

离线安装

如果上面的在线安装失败可以尝试这种方式,直接clone github仓储到指定目标文件目录

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv$ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv$ git clone https://github.com/pyenv/pyenv-update.git ~/.pyenv/plugins/pyenv-update$ git clone https://github.com/pyenv/pyenv-which-ext.git ~/.pyenv/plugins/pyenv-which-ext

五. 在python用户的~/.bash_profile中追加

export PATH="$HOME/.pyenv/bin:$PATH"eval "$(pyenv init -)"eval "$(pyenv virtualenv-init -)"

这样当用户启动的时候,会执行用户的.bash_profile中的脚本,就会启动pyenv
安装好的pyenv就在~/.pyenv目录中。

Pyenv的使用

列出所有可用版本 pyenv install --list

$ pyenv install --listAvailable versions:  2.1.3  2.2.3  ...  3.7.7  3.8.0  3.8-dev  3.8.1  ...

在线安装指定版本 pyenv install 3.8.1

$ pyenv install 3.8.1Downloading Python-3.8.1.tar.xz...-> https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tar.xz...

因为它从python官网下载python包, 在线安装可能较慢, 为了提速,可是选用cache方法:
首先在~/.pyenv目录下,新建cache目录,放入下载好的待安装版本的文件。
如果不确定要哪一个python安装包文件,把下载好的的xz、gz、tgz这几个文件都放到cache目录中去。
放好后直接执行:

$ pyenv install 3.5.3 -v

列出当前所有已经安装的python版本 pyenv versions

$ pyenv versions  system* 3.6.9 (set by /root/.python-version)  3.8.2

前面打星号的表示当前目录正在使用的python版本

列出当前正在使用的python版本 pyenv version

$ pyenv version3.6.9 (set by /root/.python-version)

global 全局设置 pyenv global 3.6.9

这里用global是作用于非root用户python用户上,如果是root用户安装,请不要使用global,否则影响太大。
比如,这里使用的CentOS6.7就是Python2.6,使用了global就成了3.x,会带来很不好的影响。

shell 会话设置 pyenv shell 3.8.2

影响只作用于当前会话, 关闭当前会话即失效

local本地设置 pyenv local 3.8.2 个人非常推荐这种方式

使用pyenv local设置从当前工作目录开始向下递归都继承这个设置。

取消local设置 pyenv local --unset

Pyenv 虚拟环境设置

为什么要使用虚拟环境?
因为刚才使用的Python环境都是一个公共的空间,如果多个项目使用不同Python版本开发,或者使用不同的Python版本部署运行,或者使用同样的版本开发的但不同项目使用了不同版本的库,等等这些问题都会带来冲突。最好的解决办法就是每一个项目独立运行自己的“独立小环境”中。

virtualenv 插件的使用

正常来说,pyenv-virtualenv插件是安装pyenv自带的,在pyenv的plugin目录里可以看到它

$ ls -al ~/.pyenv/plugins/total 24drwxrwxr-x 4 wls wls 4096 Dec 2 19:43 pyenv-doctordrwxrwxr-x 5 wls wls 4096 Dec 2 19:43 pyenv-installerdrwxrwxr-x 5 wls wls 4096 Dec 2 19:43 pyenv-updatedrwxrwxr-x 8 wls wls 4096 Dec 2 19:44 pyenv-virtualenvdrwxrwxr-x 4 wls wls 4096 Dec 2 19:44 pyenv-which-extdrwxrwxr-x 5 wls wls 4096 Dec 2 19:43 python-build

如果你的目录里没有,从github拉一份下来就好,项目地址:https://github.com/pyenv/pyenv-virtualenv,安装步骤README有写

pyenv virtualenv 3.8.1 your_env_name  # 创建出一个独立的虚拟空间pyenv virtualenvs                     # 列出所有虚拟环境pyenv activate your_env_name          # 使用某虚拟环境pyenv deactivate                      # 退出虚拟环境,回到系统环境pyenv uninstall your_env_name         # 卸载虚拟环境

Virtualenv

Virtualenv 简介

virtualenv能够创建一个拥有独立安装目录的环境, 这个环境不与其他虚拟环境共享库, 能够方便的管理管理python库.

Virtualenv 安装

$ pip3 install virtualenv

Virtualenv 使用

假设现在开发一个新的项目, 第一步我们需要先创建一套独立的python运行环境, 那么我们只需要这么做:

创建虚拟环境
$ mkdir myProject #创建工作目录$ cd myProject$ virtualenv --no-site-packages ENV$ ls -al ENV总用量 20drwxr-xr-x 4 root root 4096 4月  27 17:06 .drwxr-xr-x 3 root root 4096 4月  27 17:06 ..drwxr-xr-x 2 root root 4096 4月  27 17:06 bindrwxr-xr-x 3 root root 4096 4月  27 17:06 lib-rw-r--r-- 1 root root  296 4月  27 17:06 pyvenv.cfg

virtualenv --no-site-packages ENV  执行这条命令会创建一个名为ENV的目录, ENV 目录下分别为binlibpyvenv.cfg

bin 目录下是当前虚拟环境使用的Python解释器

lib 所有安装的python库都会放在这个目录中的lib/pythonx.x/site-packages/

pyvenv.cfg 是当前虚拟环境的配置文件

如果你想创建指定python版本的虚拟环境可以使用下面这个命令

$ virtualenv -p /usr/bin/python2.6 ENV2.6
激活虚拟环境
$ source ENV/bin/activate(ENV) $(ENV) $ pip listPackage    Version---------- -------pip        20.0.2setuptools 46.1.3wheel      0.34.2

当终端命令行开头出现(ENV)时说明已经成功进入虚拟环境, 我们可以执行 pip list 来查看当前依赖库

退出虚拟环境
(ENV) $ deactivate$

当终端命令行开头的(ENV)消失时即表示已经成功退出虚拟环境

Virtualenv 参数
--help或-h           unix中获取应用信息的标准参数。我至今还没发现任何不使用此参数的应用程式,因而比较好记。--verbose或-v        通常程序会打出很多信息,这些信息可以帮助解决一些问题。--quiet或-q          与—versbose参数相反,程序会打出非常少的信息出来。--clear              如果你想要重新安装virtualenv,使用这个参数可以删除掉之前的安装文件,并安装一个新的,因而达到重装的效果。--version            打印出应用的版本号,对于我来说打印出1.4.8。--no-site-packages   所有通过easy_install命令安装的包都是全局的,所有的用户都能够访问并使用它们。一些时候这是有用的,但是我想要一个纯净的虚拟环境而不管在系统中安装什么程序或者在其他虚拟环境中安装什么。使用这个参数就能达到目的,新环境不会使用任何系统的python包。

Virtualenvwrapper

Virtualenvwrapper 简介

上面提到的 virtualenv 可以创建一个虚拟的独立 Python 环境,但是 virtualenv 创建的环境相对分散不便于管理, 而Virtualenvwrapper 提供了一系列命令使得和虚拟环境工作变得轻松许多, 相对于virtualenv, Virtualenvwrapper有以下几个优点:

1. 将您的所有虚拟环境在一个地方

2. 包装用于管理虚拟环境(创建,删除,复制)

3. 使用一个命令来环境之间进行切换

Virtualenvwrapper 安装

$ pip install virtualenvwrapper$ pip install virtualenvwrapper-win # windows平台使用这个命令

安装之后还需要配置, 在.bashrc(或.zshrc)中添加下列内容:

export WORKON_HOME=$HOME/.virtualenvs # 设置虚拟环境的工作目录, 创建的虚拟环境都保存在这个目录下source /usr/local/bin/virtualenvwrapper.sh
注意:

virtualenvwrapper.sh 文件位置根据你的实际目录填写, 不确定的话可以使用find / -name virtualenvwrapper.sh查找一下

Virtualenvwrapper 使用

创建虚拟环境
$ mkvirtualenv ENV$ ls -al $HOME/.virtualenvs #查看创建好的虚拟环境total 12drwxr-xr-x   3 root 4096 Apr 27 18:25 .dr-xr-x---. 17 root 4096 Apr 27 18:25 ..drwxr-xr-x   5 root 4096 Apr 27 18:25 ENV

创建指定的python版本的虚拟环境

$ mkvirtualenv env  --python=python2.7
激活虚拟环境
$ workon ENV(ENV) $
导航到当前激活的虚拟环境的目录中
$ pwd/home/python$ cdvirtualenv$ pwd/home/python/.virtualenvs/ENV
退出虚拟环境 (同virtualenv一样)
(ENV) $ deactivate$
列出所有虚拟环境

workonlsvirtualenv都可以列举出已创建的所有虚拟环境

$ workonENV2.7ENV$ lsvirtualenvENV2.7======/usr/bin/python: No module named virtualenvwrapper

ENV===/usr/bin/python: No module named virtualenvwrapper
删除虚拟环境
$ workonENV2.7ENV$ rmvirtualenv ENV2.7$ workonENV

总结

Pyenv

在创建一个新的python版本时,完全拷贝一个现成的python环境,新的python版本,可作为global

Virtualenv

在创建一个新的python版本时,它生成一套软链到现有的python环境,即执行环境和版本不变,也可以制定一个python解释器让它来virtual,但是它的site-packages是独立的。

针对一个应用,建立一个独立的python运行环境。

Virtualenvwrapper

Virtualenvwrapper 是对 virtualenv 的扩展,用来管理全部的虚拟环境。

- End -WTF?能把Python代码写得这么优雅的都是神仙程序员吧!Python协程还不理解?请收下这份超详细的异步编程教程!还没学会来找我!徐大sao吃了哪些好吃的?用Python生成词云,一目了然!性能是Flask的3倍!比PHP7还快!这个Python框架你值得拥有!(附使用教程)熬了两个通宵写的!终于把多线程和多进程彻底讲明白了!

centos python_【建议收藏】Python虚拟环境最全教程,看这篇就够了!相关推荐

  1. python java混合编程_详解java调用python的几种用法(看这篇就够了)

    java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...

  2. 继万字谏言后,Python Web 怎么学,看这篇就够了!

    1. 之前那篇「万字谏言,给那些想学Python的人,建议收藏后细看!」得到很多后台读者的留言,表示想再来点,甚至说万字系?你知道万字有多少么?不要杠我根本没有万字!不叫万字你能看到这篇良心嘛! 那憋 ...

  3. 最全的Python IDE 优缺点整理,看这篇就够了!

    作者:Django Stars 机器之心编译 参与:魔王 本文介绍了多个 Python IDE,并评价其优缺点.读者可以参考此文列举的 Python IDE 列表,选择适合自己的编辑器. 写 Pyth ...

  4. 【MyBatis】基础全网最全,看这篇就够了

    一.原始JDBC开发存在的问题 package com.qf.java2107.test; ​ import org.junit.Test; ​ import java.math.BigDecimal ...

  5. 用Python并行处理大文件,看这篇就够了!

    通过使用多处理.joblib和tqdm concurrent来减少数据处理时间. 扫码关注<Python学研大本营>,加入读者群,分享更多精彩 为了进行并行处理,我们将任务划分为多个子单元 ...

  6. 箱线图怎么看_K线的48种不同类型全解(建议收藏),教你怎么看懂K线图

    ID:K线助手 来源:公众号 链接:K线的48种不同类型全解(建议收藏),教你怎么看懂K线图 中国起步较晚,1990年我国股市开市时直接起用了K线,但对K线的研究.使用一直局限于日本人的研究成果,主要 ...

  7. python中tkinter模块窗口操作_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)...

    本篇博文搬到个人博客:[洪卫の博客](https://sunhwee.com)上面去了,想要获得最佳阅读体验,欢迎前往 [https://sunhwee.com](洪卫の博客), 建议用电脑查看教程文 ...

  8. 『Python开发实战菜鸟教程』工具篇:手把手教学使用VSCode开发Python

    文章目录: 0X01:引子 Python学习资料及开发工具介绍 0x02:实操 基于 Conda 的 Python 安装 VSCode 的安装使用 安装 插件管理按钮使用介绍 VSCode 如何管理项 ...

  9. 『Python开发实战菜鸟教程』实战篇:爬虫快速入门——统计分析CSDN与博客园博客阅读数据

    文章目录 0x01:引子 首先介绍一下网络爬虫是什么,可以用来做什么? 这里简单探讨一下网络爬虫的合法性 正式进入爬虫实战前,需要我们了解下网页结构 HTML CSS JScript 写一个简单的 H ...

最新文章

  1. 可持久化线段树(主席树)【舰娘系列】【自编题】
  2. 返回手势导致页面卡死并且UI错乱的问题解决
  3. python设计模式(九):外观模式
  4. (JAVA学习笔记) 类的继承,super,方法的重写,多态
  5. 打上花火中文谐音歌词_【1分钟学会闽南语歌】茄子蛋-《浪子回头》-闽南语音译歌词视频...
  6. java 实现loading效果_简单实现JS Loading功能
  7. 2---多线程文件读写
  8. php7 获取文件类型,太简单了!PHP获取文件扩展名的7中方法
  9. 建立副本名称冲突_包的建立(一)
  10. MySQL入门之select、from、join、where子句及基本匹配符
  11. streamset 数据合并_StreamSet之数据流从JDBC到Hbase
  12. [视频教程]用Unity3d开发跳一跳小游戏
  13. 开元弧焊机器人编程_【数据】2019年中国焊接机器人市场发展现状与趋势分析...
  14. 查看sqlserver 2008中性能低下的语句
  15. k8s核心技术-Controller(statefulSet)_部署有状态应用---K8S_Google工作笔记0033
  16. Android -- Looper.prepare()和Looper.loop() —深入版
  17. 新 IT 框架概述和双态 IT
  18. python爬虫:lxml爬取链家网二手房信息
  19. 20组免费的Photoshop渐变效果素材
  20. V-rep 仿真与python远程控制

热门文章

  1. 32位有符号整数_008. 字符串转换整数 (atoi) | Leetcode题解
  2. oracle输入命令为什么显示2,oracle安装后完善2-2 sqlplus配置变量 命令提示符如何显示为用户名...
  3. java序列化kr_序列化专用列表
  4. 【LeetCode】剑指 Offer 59 - II. 队列的最大值
  5. 《深入理解 Spring Cloud 与微服务构建》第十二章 服务注册和发现 Consul
  6. 5G关键技术研究方向
  7. OpenCV数据结构
  8. Linux下的“句柄”(文件句柄,窗口句柄)
  9. String常见问题
  10. MySQL定时执行脚本(计划任务)命令实例