详解如何管理多个Python版本和虚拟环境


Posted in Python onMay 10, 2019

多个Python版本:在同一台机器上安装不同的Python,例如2.7和3.4。

虚拟环境:独立的环境,既可以同时安装特定版本的Python,也可以安装任何特定于项目的软件包,而不会影响任何其他项目。

在这里,我们将介绍使用这些工具的三种不同工具,以及何时需要每种工具。让我们探讨以下用例:

  • venv / pyvenv
  • pyenv
  • pyenv-virtualenv

如果您使用单个版本的Python如3.3+版本,并且想要管理不同的虚拟环境,那么venv就是您所需要的。

如果你想使用多个3.3+版本的Python,不管是否有虚拟环境,那么请使用pyenv。

如果您还想使用Python 2,那么这pyenv-virtualenv是一个不错的选择。

VENV

Python 3.3+版本中包含venv包。它是创建轻量级虚拟环境的理想选择。

直到Python 3.6,一个被调用的脚本pyvenv也作为包装器被包含在内venv,但是这已被弃用。它将在Python 3.8中被完全删除。当使用venv时,可以使用完全相同的功能,并且应更新所有现有的文档。

venv用于通过终端命令创建一个新的环境:

$ python3 -m venv directory-name-to-create

激活:

$ source name-given/bin/activate

通过以下方式停用:

$ deactivate

如果您在停用环境后需要完全删除环境,则可以运行:

$ rm -r name-given

默认情况下,它创建的环境是您当前正在使用的Python版本。如果您正在编写文档,并希望读者使用正确版本的Python,则可以在命令中指定主要版本号和次要版本号,如下所示:

$ python3.6 -m venv example-three-six

如果阅读器使用3.6以外的版本,则该命令将不会成功,并将在其错误消息中指示。但是,任何补丁版本(例如3.6.4)都可以使用。

当环境处于活动状态时,任何包都可以通过pip正常安装到它。默认情况下,新创建的环境不包含计算机上已安装的任何软件包。因为pip它本身不一定会安装在机器上。建议先使用,升级pip到最新版本pip install --upgrade pip。

项目通常会有一个requirements.txt指定其依赖项的文件。这允许使用shortcut命令pip install -r requirements.txt命令将所有包快速安装到新创建的虚拟环境中。它们只存在于虚拟环境中。它在停用时将不可用,但在重新激活时将保持不变。

如果您不需要使用Python本身的其他版本,那么您只需要创建隔离的、特定于项目的虚拟环境。

pyenv

如果您希望在一台计算机上使用多个版本的Python,那么pyenv是在版本之间安装和切换的常用工具。这不能与前面提到的贬值的pyenv脚本混淆。它不是与Python绑定的,必须单独安装。

pyenv文档对它的工作原理进行了很好的描述,因此我们将在这里简单介绍如何使用它。首先,我们需要安装它。如果使用Mac OS X,可以使用Homebrew执行此操作,或者考虑其他安装选项。

$ brew update
$ brew install pyenv

接下来,在shell脚本的底部添加以下内容,以允许pyenv自动更改版本:

eval "$(pyenv init -)"

打开您在使用外壳脚本,通过$ ~/.zshrc,$ ~/.bashrc或$ ~/.bash_profile复制并粘贴在上面的行。

运行pyenv版本将显示当前安装了哪些Python版本,在当前使用的版本旁边有一个*。pyenv version直接显示了这一点,python——version可以用来验证这一点。

要安装一个附加版本,比如3.4.0,只需使用pyenv install 3.4.0。

pyenv从四个方面来决定使用哪个版本的Python,优先顺序如下:

  1. PYENV_VERSION环境变量(如果指定)。您可以使用该pyenv shell命令在当前shell会话中设置此环境变量。
  2. 当前目录中的特定于应用程序的.python版本文件(如果存在)。您可以使用pyenv local命令修改当前目录的.python版本文件。
  3. 通过搜索每个父目录找到(如果有的话)第一个.python版本的文件,直到找到文件系统的根目录。
  4. 全局版本文件。您可以使用pyenv全局命令修改这个文件。如果不存在全局版本文件,pyenv假设您希望使用“system”Python。(换句话说,如果pyenv不在您的路径中,则运行哪个版本。)

当设置一个使用Python 3.6.4的新项目时,pyenv local 3.6.4将运行在它的根目录中。这将设置版本,并创建一个.python-version文件,以便其他贡献者的机器能够接收它。

pyenv命令的完整描述可以添加书签。

pyenv和venv

使用Python 3.3+时,我们现在知道如何在不同版本的Python之间安装和切换,以及如何创建新的虚拟环境。

举个例子,假设我们正在建立一个使用Python 3.4的项目。

首先,我们可以使用设置本地版本pyenv local 3.4.0。

如果我们然后运行python3 -m venv example-project新的虚拟环境将example-project使用我们在本地启用的Python 3.4.0进行设置。

我们激活使用source example-project/bin/activate并可以开始工作。

接下来,我们可以选择记录协作者应该使用的内容python3.4 -m venv <name>。这意味着即使协作者没有使用pyenv该python3.4命令,如果他们的Python版本不是我们想要的主要和次要版本(3和4),也会出错。

如果我们认为任何大于3.4的版本都是可以接受的,那么我们也可以选择使用python3而不是python3.4,就像合作者使用3.6一样,否则他们也会收到一个错误。这是一个特定于项目的决策。

pyenv-virtualenv

pyenv可用于安装Python 2和3版本。但是,正如我们所看到的,venv仅限于大于3.3的Python版本。

pyenv-virtualenv是一个创建与pyenv集成的虚拟环境的工具,适用于所有Python版本。如果可能,仍然建议使用官方的Python venv。但是,例如,如果您正在创建一个基于2.7.13的虚拟环境,那么这是对pyenv的赞美。

如果您已经使用它,它也适用于Anaconda和Miniconda conda环境。virtualenv还存在一个名为的工具。这里没有涉及,但它最后是联系在一起的。

安装pyenv,接下来可以使用Homebrew(或替代品)进行安装,如下所示:

$ brew install pyenv-virtualenv

接下来在你的 .zshrc,, .bashrc或 .bash_profile(取决于你使用的shell)在底部添加以下内容:

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

这允许pyenv在移动目录时自动激活和停用环境。

要创建新的虚拟环境,请使用:

$ pyenv virtualenv <version> <name-to-give-it>
// for example
$ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10

可以列出现有环境:

$ pyenv virtualenvs

激活/停用:

$ pyenv activate <name>
$ pyenv deactivate

在撰写本文时activate,prompt changing will be removed from future release将显示使用警告。这是预期的,仅指(env-name)在shell中显示的内容,而不是activate命令本身的使用。

安装要求的工作原理如下所述venv。不像在venv一个rm -r命令不需要删除一个环境,一个uninstall命令存在。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python查找目录下指定扩展名的文件实例
Apr 01 Python
python下载图片实现方法(超简单)
Jul 21 Python
Python上下文管理器和with块详解
Sep 09 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
Oct 30 Python
python3 实现一行输入,空格隔开的示例
Nov 14 Python
使用python将请求的requests headers参数格式化方法
Jan 02 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
Mar 06 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
Mar 20 Python
Python OrderedDict字典排序方法详解
May 21 Python
Pycharm导入anaconda环境的教程图解
Jul 31 Python
pytorch中的numel函数用法说明
May 13 Python
windows安装python超详细图文教程
May 21 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 #Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 #Python
Python3列表内置方法大全及示例代码小结
May 10 #Python
详解python 爬取12306验证码
May 10 #Python
详解用python写一个抽奖程序
May 10 #Python
python实现小球弹跳效果
May 10 #Python
基于python实现百度翻译功能
May 09 #Python
You might like
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
javascript一点特殊用法
2008/05/28 Javascript
Mootools 1.2教程 事件处理
2009/09/15 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
2016/03/30 Javascript
AngularJS下对数组的对比分析
2016/08/24 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
Python中的asyncio代码详解
2019/06/10 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
Python列表解析操作实例总结
2020/02/26 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
Python paramiko使用方法代码汇总
2020/11/20 Python
办公室副主任岗位职责
2013/11/25 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
护士2014年终工作总结
2014/11/11 职场文书
2015年体育部工作总结
2015/04/02 职场文书
大学运动会加油稿
2015/07/22 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android