版本控制工具的差异

这里介绍几个工具:pyenv、pyvenv、 venv、virtualenv、pyenv-virtualenv

  1. virtualenv

    • 是针对python的包的多版本管理,通过将python包安装到一个模块来作为python的包虚拟环境,通过切换目录来实现不同包环境间的切换。其实不是非常爱捣腾的话,此工具就已经可以应付同python版本多环境问题了,安装使用也非常简单
  2. virtualenvwrapper
    • 是一组对virtualenv的扩展(请参阅docs )。 它给你的命令像mkvirtualenv , lssitepackages ,特别是在不同的virtualenv目录之间切换的工作。 如果您想要多个virtualenv目录,此工具特别有用,由于我使用的pycharm来开发的,每个项目里面一个,所以这个对我来说没啥用
  3. pyenv
    • 用于隔离Python版本,这样可以来系统中随意使用python版本,而不至于影响到线上环境
  4. pyenv-virtualenv
    • pyenv-virtualenv是与pyenv相同的作者pyenv的插件,可以方便地同时使用pyenv和virtualenv,如果是用vim进行开发的话,那么这个非常的方便,但是由于我使用的是pycharm开发,所以这里我并没有使用.
  5. pyvenv
    • 是Python 3附带的脚本但是 在Python 3.6中弃用 因为它有问题(更不用说令人困惑的名字)。在Python 3.6+中,确切的等价物是 python3 -m venv
  6. venv
    • 是Python 3附带的一个包,您可以使用它运行 python3 -m venv (虽然由于某种原因,一些发行版将它分成一个单独的发行版包,例如 python3-venv 在Ubuntu / Debian上)。它的用途与此类似virtualenv,并以非常类似的方式工作,但它不需要复制Python二进制文件(除了在Windows上)。如果你不需要支持Python 2可以尝试.实际上我部分业务的部署是使用的这个模块

pyenv: 便捷的 python 版本管理工具

由于 python 分为 python2 和 python3,它们各自又有许多版本可供选用,如果系统上同时安装了多个 python,很容易遇到版本切换的问题:

输入 python 命令的时候,如何快速准确的调出特定版本的 python 解释器?

这实际上是一个关于 $PATH 环境变量的问题。当输入 python 命令的时候,系统从左向右搜索 $PATH 环境变量中的各个路径,并且运行第一个找到的程序。所以解决这个问题的关键是动态修改 $PATH 环境变量中储存的 python 路径,而 pyenv 通过 shell script 和 shims 技术实现了这一点。使用 pyenv 可以很方便的:

安装版本

$ pyenv  install --list

使用版本号

$ pyenv install 2.7.6
$ pyenv install 3.6.1

python 安装完成后需要运行

pyenv rehash

使用 pyenv 指定 python 非常方便,只需在某个目录下执行命令:

$ pyenv local 3.6.1

则在该目录下运行的 python 都是 3.6.1 版本。
要查看系统中安装了哪些 python 版本,可以执行命令:

$ pyenv versions
system
2.7.6 (set by /Users/yyuu/path/to/project/.python-version)
* 3.6.1 (set by /Users/yyuu/path/to/project/.python-version)

其中system代表系统自带的版本,其余是通过 pyenv 安装的版本,*号表示当前使用的版本。因此:

$ python --version
Python 3.6.1

同样的,pip等工具都和 3.6.1 版本对应,使用pip安装软件包时也会安装到 3.6.1 对应的目录下。
以上是对 pyenv 的简单介绍,详细说明请参考官方文档。

pyenv-virtualenv: 管理虚拟环境的插件

pyenv 解决的是同一个系统中不同版本的 python 并存的问题,而 pyenv-virtualenv 解决的是不同项目所依赖的软件包之间可能产生冲突的问题。在实际使用 python 的过程中,很容易出现这样的问题:

通过pip安装软件包 A 时安装了 A 所依赖的软件包 B;之后又通过pip安装软件包 C 时再次安装了 B 并将之前的覆盖,但是因为 C 和 A 所依赖的 B 版本不同,安装完 C 后导致 A 无法运行。

pyenv-virtualenv 通过为每个项目设置独立的虚拟环境(目录)来解决上述问题。
由于 pyenv-virtualenv 是 pyenv 的一个插件,因此需要首先安装 pyenv ,然后通过 git 或者 brew 安装 pyenv-virtualenv。
使用 pyenv-virtualenv 创建虚拟环境:

$ pyenv virtualenv 3.6.1 my-virtual-env-3.6.1

将创建一个名为my-virtual-env-3.6.1的虚拟环境(目录),并且将 python 3.6.1 对应的bin和lib复制到该环境中。当该虚拟环境被激活后,所有的 python 操作都只在该环境中进行,从而和其它 python 内容隔离。
pyenv-virtualenv 支持自动激活和退出虚拟环境。首先确保在 shell 配置文件中添加了

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

接着在需要使用虚拟环境的目录(通常是项目目录)中:建立一个.python-version的文本文件,将虚拟环境名称(如my-virtual-env-3.6.1)写在里面即可。之后每次进/出该目录时,虚拟环境都将自动激活/退出。
也可以用命令手动激活和退出:

$ pyenv activate my-virtual-env-3.6.1
$ pyenv deactivate

查看所有虚拟环境、删除虚拟环境等更多命令和其他使用细节,请参考官方文档。

总结

pyenv 用来管理一个系统内多个不同版本的 python,常用命令包括:

pyenv install --list                            #列出可供安装的 python 版本
pyenv install <version> #安装指定版本的 python
pyenv local <version> #在当前目录下设置 python 版本
pyenv versions #列出系统中安装的 python 版本
pyenv version #显示当前目录下采用的 python 版本

pyenv-virtualenv 用来隔离各个项目的依赖文件,常用命令包括:

pyenv virtualenv [version] <venv-name>          #创建虚拟环境
pyenv activate <venv-name> #激活虚拟环境
pyenv deactivate #退出虚拟环境

Python 的版本控制的更多相关文章

  1. Ubuntu安装pyenv实现python多版本控制

    Ubuntu安装pyenv实现python多版本控制 git clone git://github.com/yyuu/pyenv.git ~/.pyenv echo 'export PYENV_ROO ...

  2. python多版本控制

    1安装git # yum install git -y 2.安装python依赖 # yum -y install gcc make patch gdbm-devel openssl-devel sq ...

  3. 通过anaconda进行python多版本控制

    ---恢复内容开始--- linux与windows通用. 1. 假设电脑上已经转好anaconda3. (anaconda 默认装好了python3.jupyter.spyter) 2. 现在需求是 ...

  4. Python 依赖版本控制 (requirements.txt 文件生成和使用)

    requirements.txt 最好配合虚拟空间使用, 虚拟空间的使用请参考 Python 虚拟空间的使用 - 难以想象的晴朗. requirements.txt 可以保证项目依赖包版本的确定性, ...

  5. Ubuntu安装pyenv实现多版本控制

    Ubuntu安装pyenv实现多版本控制 git clone git://github.com/yyuu/pyenv.git ~/.pyenv echo 'export PYENV_ROOT=&quo ...

  6. python安装多版本

    39.107.96.81 root 123123 pyenv#可以实现python多版本控制与切换 pyenv local 3.5.1 ipython#更方便的编写python,可以补全命令彩色显示等 ...

  7. python 连接sqlserver: pymssql

    停了一个月,终于还是把这个做了,工作需要!!!在装pymssql时,一直报错,确定了要先装freetds: 1. 安装freetds时报错,搜索到要先进行如下操作: brew unlink freet ...

  8. 读书分享全网学习资源大合集,推荐Python学习手册等三本书「01」

    0.前言 在此之前,我已经为准备学习python的小白同学们准备了轻量级但超无敌的python开发利器之visio studio code使用入门系列.详见 1.PYTHON开发利器之VS Code之 ...

  9. linux centos7 安装虚拟Python环境,pyenv安装文档

    python多版本控制pyenv安装文档 1.在线安装: curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-i ...

随机推荐

  1. 了解html

    什么是html? html:Hyper Text Markup Language(超文本标记语言) 纯文本:只能存储一些简单的字符(不能插入图片.视频...) 注意:html不是一种编程语言(它没有任 ...

  2. <Trie> 208 211

    208. Implement Trie (Prefix Tree) class TrieNode{ private char val; public boolean isWord; public Tr ...

  3. Linux性能优化实战学习笔记:第二十七讲

    一.案例环境描述 1.环境准备 2CPU,4GB内存 预先安装docker sysstat工具 2.温馨提示 案例中 Python 应用的核心逻辑比较简单,你可能一眼就能看出问题,但实际生产环境中的源 ...

  4. linux shell脚本中的延时

    linux shell脚本中的延时 还是使用 sleep 或usleep函数. 详细如下:     .sleep : 默认为秒. sleep 1s 表示延迟一秒   sleep 1m 表示延迟一分钟 ...

  5. 使用go-mysql-elasticsearch同步mysql数据库信息到ElasticSearch

    本文介绍如何使用go-mysql-elasticsearch同步mysql数据库信息到ElasticSearch. 1.go-mysql-elasticsearch简介 go-mysql-elasti ...

  6. Windows10 64位部署odoo12开发环境

    预装Windows10 64位家庭版电脑一台 2019年7月 安装Python,这里的版本选择上有个坑,不要装最新的Python 3.7.x,原因是odoo12依赖pillow 4.0.0库,而这个4 ...

  7. Django+nginx+gunicore+supervisor+阿里云主机 部署博客项目

    1 准备阶段 1 新鲜的阿里云主机 2 购买一个喜欢的域名 3 创建python的虚拟环境 2 阿里云主机的选取 咱们就是为了实验,我买了最便宜的阿里云主机 3 阿里云主机创建一个超级用户 3.1 默 ...

  8. pyqt助手中安装Qt帮助文档

    一.个人安装环境 1.Windows7x64_SP1 2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 3.pyinstaller3.0 4.通过Anaco ...

  9. PostMan测试REST接口时候,如何绕过登录的验证

    原文地址:https://blog.csdn.net/qq_34178998/article/details/80361315 之前测试的时候,需要页面进行登录之后,才能让访问后台程序,但是在进行接口 ...

  10. nginx location笔记

    nginx location笔记= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因此请求为/static/20%/aa,可以被规则 ...