008_使用pyenv进行py开发环境管理
一、
安装Python
绝大多数Python入门书籍,都会介绍如何安装Python,然而,本书要介绍一种全新的安装方式。使用pyenv来安装并管理我们的环境。
pyenv简介
由于Python的依赖是基于site的,这多与生产环境来说,是一种简单而正确的方式,然后,对于我们的开发环境,基于这样的管理方式,带来了可怕的第三方依赖管理的难题。想象一下,你在开发一个新项目的同时,还在维护一个就项目, 新项目依赖某个包的较新的版本,旧项目却依赖一个相对较旧的版本,而这两个版本是不兼容的,事实上,这种不兼容,在Python世界里是司空见惯的。
基于以上难题,virtualenv适时出现了,拯救了广大因依赖问题焦头烂额的Python程序员。virtualenv无疑是成功的,他为每个项目创建一个虚拟环境,使得项目的依赖全部在一个虚拟且封闭的环境中,互不干扰。然而,这就够了吗?
想象下面一种场景:你的新项目在Python 3.3下面开发,而你维护的旧项目,缺工作在Python 2.7之上,为了完成工作,你不得不安装两个Python解释器,并为每个解释器配置virtualenv,在你调试执行的时候,不得不适用冗长的全路径调用解释器,或者不断的修改你的环境变量。天哪,你再次陷入与你的工作无关的,烦人的事情中。
pyenv的出现,就是来拯救你的。pyenv是一个Python多版本管理工具,他设计精巧,通过巧妙的方法,可以使多版本的Python共存在一个操作系统能,简单的实现切换,或者更具项目使用不同的Python。
pyenv支持插件,通过插件,可以和virtualenv完美结合,实现多版本,多环境的控制,是你的每个项目,仿佛运行在一个完全隔离的环境种一样。
安装pyenv
pyenv是纯python开发的,安装pyenv只需要极少数的依赖,它们是::
- Python >= 2.5 < 3
- git
因为pyenv是Python开发的,所以需要有一个可运行的python版本,然而,这个不必担忧,绝大多数linux和unix发行版以及mac都已经预装了python,我们唯一需要做的是安装git,并且把他的路径放到PATH
中。
如果你能访问Github, 那么安装pyenv是一件简单而快乐的事, 因为pyenv的作者,很贴心的给我们准备了一个安装脚本pyenv-installer,只需要简单的执行就可以了。
使用pyenv-installer安装pyenv很简单,只需要在终端执行:
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
等待一段时间就可以了。安装完成,pyenv-installer会提示你配置pyenv的环境变量,你仅仅需要做的就是根据提示,把如下的内容加入到你的profile里。
export PYENV_ROOT="\${HOME}/.pyenv" if [ -d "\${PYENV_ROOT}" ]; then
export PATH="\${PYENV_ROOT}/bin:\${PATH}"
eval "\$(pyenv init -)"
fi
重新载入profile之后,你就可以开始使用你的pyenv了,使用pyenv-installer安装的pyenv,会帮助我们安装几个有用的插件,其中,最常用的有:
- pyenv-virtualenv 用于整合virtualenv
- pyenv-pip-rehash 用于使用pip安装包之后自动执行rehash
- pyenv-update 用于升级pyenv
使用pyenv安装Python
使用pyenv安装Python非常简单,但是在由于需要编译Python,所以我们需要有变异Python的依赖,以CentOS 6为例,我们需要如下依赖:
- gcc
- gcc-c++
- make
- patch
- openssl-devel
- zlib-devel
- readline-devel
- sqlite-devel
- bzip2-devel
你可以使用你喜欢的包管理器来安装这些依赖,例如:
yum -y install gcc gcc-c++ make patch openssl-devel zlib-devel readline-devel sqlite-devel bzip2-devel
完成以上步骤之后,你可以使用pyenv来管理你的Python环境了。安装Python只需要使用install
命令即可。
pyenv install 2.7.5
以上命令将在你的系统上安装 Python-2.7.5, 使用过linux包管理系统的朋友,对这样的安装方式,是相当亲却的。
install
命令有若干选项可用,可以通过 pyenv help install
来查看。常用的,我们可以通过-l
选项来查看所有可用版本:
pyenv install -l
讲列出所有可用版本。
tips:由于使用pyenv安装的时候,需要到github下载Python源码包,国内用户可能速度比较慢,这个时候,可以修改PYTHON_BUILD_MIRROR_URL
环境变量,使用国内镜像。http://magedu-python.qiniudn.com/pythons
是我制作的一个镜像,托管在七牛云存储上
安装完成之后,并不能立刻使用你所安装的Python,因为pyenv作为一个Python环境管理工具,安装只是第一步,你还需要切换到你新的Python版本上。pyenv提供两个命令来切换Python版本。global
命令和local
命令。故名思议,一个是全局的,一个是本地的。
在介绍两个切换命令之前,我们先来看其他几个pyenv命令。
versions和version命令
versions
命令列出你已经安装的Python版本以及当前使用的版本
pyenv versions
执行以上输出,你将会得到如下的输出:
也许你的输出会有所出入,但是大致相同,前面加*
号的版本是当前版本,后面括号内的内容描述了它是在何处设置的,后面会详细讲解。
version
命令打印你当前使用版本。version
命令的输出类似versions
命令,但是它只包含了当前版本那一行,并且没有前导的*
.
版本名称system
代表系统预装Python。
global和local命令
global
命令和local
命令都是用来切换当前Python版本的命令。不同之处在于,global
的切换是全局的,而local
的切换是局部的。
pyenv local 2.7.5
以上命令:会在当前目录下创建一个.pyenv-version
文件,文件内容为2.7.5
,pyenv通过这种形式,标记当前目录使用Python-2.7.5。如果其子目录下面没有.pyenv-version
文件,那么此版本讲继承到子目录。
pyenv global 2.7.5
以上命令:会修改$PYENV_HOME/version
文件的内容,标记全局Python版本,如何理解全局Python版本,可以认为全局版本是一个默认值,当一个目录及其父目录下面都没有.python-version
文件的时候,会使用全局版本。
一般的,我们不修改全局版本,而使用期默认值system
,因为在unix系统上,很多系统工具依赖于Python,如果我们修改了Python的版本,会造成绝大多数的依赖Python的系统工具无法使用,如果你不小心修改了,也不要紧张,使用global
命令修改回来就可以了,有时候,你发现部分系统工具无法使用,你也可以看看你当前的Python版本。
到这里,你或许已经迫不及待的想要开始了,那么你可以跳过本章之后的部分,直接看第二章,开始你的Python之旅,但是我还是强烈建议你以后回过头来看看本章剩下的部分,他演示了如何使用pyenv结合virtualenv的强大功能。
uninstall 命令
顾名思义,uninstall命令是用来卸载Python版本的,一个已经安装的版本,如果我们不在使用,可以简单的执行uninstall
命令把它从硬盘上卸载。
pyenv uninstall 2.7.5
以上命令将卸载Python-2.7.5
pyenv与virtualenv
pyenv通过插件,可以很好的和virtualenv一起工作,通过整合virtualenv,pyenv实现了真正意义上的环境隔离,每个项目都相当于使用一个单独的解释器。
通过pyenv-installer安装的pyenv,已经安装好virtualenv插件了,如果不是通过pyenv-installer安装的pyenv,你可能需要自己安装virtualenv插件,安装方法也很简单:
cd $PYENV_ROOT/plugins
git clone https://github.com/yyuu/pyenv-virtualenv.git
直接把插件clone下来就安装完成了。
安装完成之后,我们可以通过virtualenv命令即可创建虚拟环境,virtualenv的一般用法如下:
pyenv virtualenv [-f|--force] [-u|--upgrade] [VIRTUALENV_OPTIONS] <version> <virtualenv-name>
选项-f
表示强制的,也就是如果已经存在这个虚拟环境,那么将会覆盖这个虚拟环境 选项-u
表示upgrade,用于修改已经存在的虚拟环境的Python版本 VIRTUALENV_OPTIONS
是传递给virtualenv的选项,可以通过virtualenv的帮助获取选项的含义version
表示Python版本 virtualenv-name
是我们给虚拟环境指定的名字
例如:
pyenv virtualenv 2.7.5 my_project
以上命令就创建了一个基于Python-2.7.5,名为my_project的虚拟环境。创建好的虚拟环境犹如一个单独Python版本一样,我们可以通过local
或者global
命令切换过去。
由于每个解释器间是完全隔离的,所以强烈建议你的每个项目,都放置在单独的虚拟环境中。
virtualenv插件还提供了virtualenvs
命令,用于列出所有已经创建的虚拟环境,
pyenv virtualenvs
以上命令列出我们所有已经创建的虚拟环境,已经虚拟环境基于那个Python版本。
当我们的一个项目生命周期结束的时候,我们或许会想要删除虚拟环境以释放我们的硬盘空间,删除虚拟环境非常简单,直接用uninstall
命令像删除正常的Python版本一样就可以了。
事实上,虚拟环境一旦创建,你就可以把他当成一个独立的版本来使用和维护了。
二、使用
pyenv virtualenv 2.7.10 jyallprodpy
参考:https://github.com/comynli/pybooklet/blob/master/install.md
三、使用virtualenv进行隔离环境开发
https://medium.com/the-python-corner/using-virtual-environments-with-python-7166d3bfa218
008_使用pyenv进行py开发环境管理的更多相关文章
- python使用web.py开发httpserver,解决post请求跨域问题
使用web.py做http server开发时,遇到postman能够正常请求到数据,但是浏览器无法请求到数据,查原因之后发现是跨域请求的问题. 跨域请求,就是在浏览器窗口中,和某个服务端通过某个 “ ...
- C++服务器linux开发环境管理
在游戏服务器开发中,跨平台不是必须的.线上游戏既有windows下的C++..Net服务器也有linux下的C++.go.erlang服务器.但是无论如何都要保证开发环境和线上运行环境的一致,否则不同 ...
- web.py开发
web.py需要使用python2.X,所以安装python版本2.7.9 web.py 是一个轻量级Python web框架,它简单而且功能强大 web.py安装 安装python (1)使用pip ...
- 开发环境管理利器Vagrant
引言 不知道你是否经历过,开发环境与生产环境不一致.Windows开发和Linux上的包效果不一样.在我这运行时好的啊 等等等问题,那有没有解决方法呢? 答案就是Vagrant.Docker 1.简介 ...
- Ubuntu下使用sublime text进行py开发
放弃了,半天弄不出一个方便的开放环境,还是现成的iDE方便 下载方法 https://www.sublimetext.com/docs/3/linux_repositories.html 首先安装Pa ...
- Python多环境管理神器(pyenv)
前面我们已经介绍了,python中两种最基础的虚拟环境管理工具,venv和virtualenv,其中virtualenv可以和virtualenvwrapper配合使用.详情请参考:https://w ...
- Python虚拟开发环境
最近,一直在不同版本的Python之间来回折腾,发现了几个Python虚拟开发环境工具,具体如下: 1. Virtualenv,可以指定开发环境的Python版本.继承已有开发环境配置,virtual ...
- 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
今年微软Build 2016大会最让开发人员兴奋的消息之一,就是在Windows上可以原生运行Linux bash,对开发人员来说,这是一个喜闻乐见的消息. 1 安装 你必须安装开发者预览版本,才能使 ...
- pyenv的使用
开始想使用virtual实现不同的版本的py隔离,然后发现不太方便,然后发现了这货. pyenv安装(ubuntu环境 ➜ ~ git clone git://github.com/yyuu/pyen ...
随机推荐
- js 处理金额各个位数上的值
//金额处理 var number = 1234567.35; if (parseInt(number) == number) { var money = number.toString().spli ...
- web移动端,需要清楚设备像素比devicePixelRatio的应用
我们这里所说的devicePixelRatio其实指的是window.devicePixelRatio, 被所有WebKit浏览器以及Opera所支持. 概念 devicePixelRatio ,它是 ...
- BZOJ 1022: [SHOI2008]小约翰的游戏John (Anti-nim)
Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3134 Solved: 2003[Submit][Status][Discuss] Descripti ...
- HDU3440 House Man
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- 洛谷P4589 [TJOI2018]智力竞赛(二分答案 二分图匹配)
题意 题目链接 给出一个带权有向图,选出n + 1n+1条链,问能否全部点覆盖,如果不能,问不能覆盖的点权最小值最大是多少 Sol TJOI怎么净出板子题 二分答案之后直接二分图匹配check一下. ...
- 【20190220】JavaScript-知识点整理:对象创建方式、原型、闭包
一.对象创建方式 1. 工厂模式 这种模式抽象了创建具体对象的过程,用函数来封装以特定接口创建对象的细节.存在的问题是无法通过 instanceof 识别一个对象的类型. function creat ...
- iPhone手机怎么投屏到电脑 airplay在哪里设置
iPhone手机怎么投屏到电脑?想要小屏转大屏,其实方法很简单,简单几步就可以操作,下面简单几步教大家手机投屏电脑的方法. 使用工具: Iphone&电脑 操作方法: 1.如果想要把手机本地的 ...
- 如何用ABP框架快速完成项目(10) - ABP只要加人即可马上加快项目进展- 全栈篇(1) - 发挥DDD理论优势的时候到了!
正如我在<程序员英语二三事(2) - 从听开始>里说的, 任何技术/工具/语言都有其适用场景和上下文环境. DDD理论同样是如此. 现在, 终于到了发挥DDD理论优势的时候啦! 一 ...
- Android为TV端助力 修改videoview的宽度和高度
如果直接用android的videoview.他是不允许你随意的修改宽度和高度的,所以我们要重写videoview! package com.hysmarthotel.view; import and ...
- QTP入门——玩玩小飞机
1.什么是QTP? 百度百科中对QTP是这么介绍的: ——”QTP是QuickTest Professional的简称,是一种自动化测试工具.使用QTP的目的是想用它来执行重复的自动化测试,主要是用于 ...