详解如何管理多个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中global与nonlocal比较
Nov 21 Python
Python3访问并下载网页内容的方法
Jul 28 Python
python批量添加zabbix Screens的两个脚本分享
Jan 16 Python
python中format()函数的简单使用教程
Mar 14 Python
对python中字典keys,values,items的使用详解
Feb 03 Python
对Django中的权限和分组管理实例讲解
Aug 16 Python
利用pandas合并多个excel的方法示例
Oct 10 Python
pandas DataFrame 数据选取,修改,切片的实现
Apr 24 Python
python爬虫请求头设置代码
Jul 28 Python
Python如何创建装饰器时保留函数元信息
Aug 07 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
Nov 17 Python
python实现双链表
May 25 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 Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
2016/09/09 PHP
Javascript 面向对象 命名空间
2010/05/13 Javascript
js调用AJAX时Get和post的乱码解决方法
2013/06/04 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
node.js中的console.warn方法使用说明
2014/12/09 Javascript
JS实现三个层重叠点击互相切换的方法
2015/10/06 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
2017/08/29 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
2019/07/29 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
2020/07/13 Javascript
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
python的pip安装以及使用教程
2018/09/18 Python
python批量下载抖音视频
2019/06/17 Python
Python调用.NET库的方法步骤
2019/12/27 Python
python字符串判断密码强弱
2020/03/18 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
2018/03/02 HTML / CSS
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
索尼巴西商店:Sony巴西
2019/06/21 全球购物
给儿子的表扬信
2014/01/15 职场文书
股东出资证明书(正规版)
2014/09/24 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
于丹讲座视频观后感
2015/06/15 职场文书
师范生见习总结范文
2015/06/23 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js
MySQL学习之基础操作总结
2022/03/19 MySQL