
12. 所谓的虚拟环境, 还有那个相关的包管理工具。12.1. 概述在大多数时候, 应用程序通常会使用那些不在标准库里面的软件包以及模块。与此同时, 应用程序在某些情况下需要用到特定版本的库文件, 这是因为应用程序可能需要对某个特定的错误进行修复, 又或者是因为该应用程序本身是利用库里的旧有版本的接口来编写的。这就是说, 可能连一次安装都满足不了每一个应用程序提出来的那些要求啊。假如应用程序A它需要特定模块的1.0版本这个东西。可与此同时, 应用程序B又需要2.0版本的那个东西。那么这个时候, 需求方面就已经存在冲突了。你要是选择安装那个1.0版本的, 或者是选择安装2.0版本的。最终都会导致某一个应用程序没办法正常运行。这个问题解决的办法就是去创建一个环境, 这个环境里头是一棵目录树的样子, 在这棵树下头安装了特定版本的软件, 另外还装上了很多其他的配套包。这样的话, 多种多样的应用程序就都能够拥有专属于它们的虚拟运行环境。为了能够妥善地处理和解决先前出现的需求彼此相互冲突的具体示例情况, 具有标识性的那个应用程序 A, 就可以去拥有并且配置一套属于自己的、内部已经成功安装了 1.0 这特定版本的独立虚拟环境, 与此同时, 另外的那个应用程序 B, 也可以去拥有一个完全不同的、专门为其配置的、其中安装了 2.0 这个版本的独立虚拟环境。那么假如在后续的开发和维护过程中, 特定的应用程序 B 明确提出了要求, 必须要将某个共享库或者相关组件进行升级操作, 并且将其强制更新到了 3.0 这样更高的版本上面之后, 整个操作的最终结果和实际效应将受到严格的隔离限制, 绝对不会也不会对那个单独运行的应用程序 A 自身所在的原本稳定环境产生任何实质性的干扰和影响。12.2. 创建虚拟环境这个用于创建虚拟环境以及对它进行管理的模块的名字叫做。你一般需要把你电脑上能找到的最新版本给装好。要是你的电脑里同时有老版本和新版本的那些东西, 你就可以通过输入特定的代码或者是选中你最中意的那个版本号, 来决定到底用哪一个。用户需要创建一个虚拟环境, 所以首先要确定好要把这个存放它使用的目录路径给定下来。紧接着需要将对应的模块当作脚本文件去执行, 并且把这个事先确定的目录路径也作为参数传递过去运行:python3 -m venv tutorial-env这将创建那个环境文件, 如果它目前尚不存在的状况之下。此外, 还会复制那些具体的配置文件、相关的设置文档以及一些特定的数据记录材料给到目标位置上去。在虚拟环境中, 常用的目录位置是 .venv。之所以选择这个名称, 是因为它通常会让该目录在你的终端里被显示为隐藏状态, 这样一来, 你就没必要再用那些普通且容易引起解释的名字去命名它了。另外, 这么做的好处在于, 它能避免和你那些支持环境变量定义文件的工具里用的 .env 文件产生冲突问题。在建立起虚拟环境之后, 您接下来能够执行的操作就是去激活这个环境。在上运行:tutorial-env\Scripts\activate.bat在Unix或者MacOS上进行操作的时候, 运行:source tutorial-env/bin/activate这个脚本是专门为 bash 这种 shell 来编写使用的, 如果你平常使用的是 csh 或者 fish shell, 那你就应该换一个办法, 去使用那些以 .csh 或者 .fish 结尾的脚本文件才行。激活虚拟环境之后, 你所使用的终端上的提示符会发生变化, 从而用来表示出当前正在运行的这个虚拟环境, 并且会对运行环境进行相应的修改, 让命令在执行的时候所起作用的是已经被安装好的那个特定版本号, 下面是一个具体的例子:$ source ~/envs/tutorial-env/bin/activate(tutorial-env) $ pythonPython 3.5.1 (default, May 6 2016, 10:59:36)... import sys sys.path[, /usr/local/lib/python35.zip, ...,~/envs/tutorial-env/lib/python3.5/site-packages]12.第三步, 进行使用pip这个工具来管理各种包的操作。You can , , and using a . By pip will from the Index, . You can the Index by going to it in your web .pip这个工具包含了非常多的子命令, 比如像这么的, 还有这么的, 以及这么的, 诸如此类的还有很多。请大家前往那个相关的指南页面的地方, 去查阅完整的pip文档内容用户可以通过明确地给出目标软件包的具体名称, 完成对该软件包最新适用版本的下载与安装操作。(tutorial-env) $ python -m pip install novasCollecting novasDownloading novas-3.1.1.3.tar.gz (136kB)Installing collected packages: novasRunning setup.py install for novasSuccessfully installed novas-3.1.1.3另外, 您也可以采取提供一种做法, 那就是提交包的名称, 接着加上两个等于号, 随后再加上具体的版本号, 这样以来就可以完成对特定版本的包进行的安装这一动作了。(tutorial-env) $ python -m pip install requests2.6.0Collecting requests2.6.0Using cached requests-2.6.0-py2.py3-none-any.whlInstalling collected packages: requestsSuccessfully installed requests-2.6.0当你再次执行这个指令的操作的时候, 包管理工具 pip 会发现之前已经安装过了你所要求的具体的那个版本的信息, 所以它就直接不做任何额外的动作了。如果你觉得需要获得其他的内容, 你可以提供不同号码的版本编号来获取特定的版本, 同时, 你可以通过运行带有特别参数选项的 pip 命令这种方式来达到将软件安装包整体升级到最高最新状态的目标:(tutorial-env) $ python -m pip install --upgrade requestsCollecting requestsInstalling collected packages: requestsFound existing installation: requests 2.6.0Uninstalling requests-2.6.0:Successfully uninstalled requests-2.6.0Successfully installed requests-2.7.0在执行完pip命令之后, 如果紧接着输入一个或多个要处理的包名称, 那么这些对应的软件包就会被彻底地从当前的虚拟运行环境里面给删除掉。运行那个叫做pip show的命令, 就能够看到关于某一个具体的包的详细的信息。(tutorial-env) $ pip show requests---Metadata-Version: 2.0Name: requestsVersion: 2.7.0Summary: Python HTTP for Humans.Home-page: http://python-requests.orgAuthor: Kenneth ReitzAuthor-email:License: Apache 2.0Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packagesRequires:当你执行pip list这条命令的时候, 那么它就会显示出在你的那个虚拟环境里面已经安装好的所有软件包的名单。(tutorial-env) $ pip listnovas (3.1.1.3)numpy (1.9.2)pip (7.0.3)requests (2.7.0)setuptools (16.0)使用 pip 这个命令将会产生一个和之前相似的, 已经安装好的软件的清单, 可是它输出的内容会采用 pip 认为合适的格式, 大家在平时通常都会按照一个常见的习惯, 把这个列出来的清单保存到一个名字是以 .txt 结尾的文件里面去:(tutorial-env) $ pip freeze requirements.txt(tutorial-env) $ cat requirements.txtnovas3.1.1.3numpy1.9.2requests2.7.0接下来, 可以把那个名为 .txt 的文件提交到版本控制系统里面去, 并且让它变成应用程序的一部分提供给大家。再然后, 用户就可以使用 -r 这个参数来把所有的必需的包进行安装:(tutorial-env) $ python -m pip install -r requirements.txtCollecting novas3.1.1.3 (from -r requirements.txt (line 1))...Collecting numpy1.9.2 (from -r requirements.txt (line 2))...Collecting requests2.7.0 (from -r requirements.txt (line 3))...Installing collected packages: novas, numpy, requestsRunning setup.py install for novasSuccessfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0具备更为丰富的功能选项, 若想了解关于的全部说明文档, 敬请参阅相应的指南资料。当您在开发一个包并希望使其在包索引中变得可用时, 请参考相关的指南内容。。