12. 虚拟环境
12.1.
概述

Python
应用程序通常使用不在标准软件包模块应用程序有时需要特定版本因为应用程序可能需要修复特定错误或者可以使用过时版本接口编写应用程序

意味着Python安装可能无法满足应用程序要求如果应用程序A需要特定模块1.0版本应用程序B需要2.0版本需求存在冲突安装版本1.02.0导致应用程序无法运行

这个问题解决方案创建 virtual environment,目录其中安装特定Python版本以及许多其他

然后不同应用可以使用不同虚拟环境解决先前需求冲突例子应用程序 A 可以拥有自己 安装 1.0 版本虚拟环境应用程序 B 拥有安装 2.0 版本另一虚拟环境如果应用程序 B 要求升级 3.0 版本不会影响应用程序 A 环境
12.2.
创建虚拟环境

用于创建管理虚拟环境模块 venv。 venv 安装运行命令使用 Python 版本 --version 选项报告版本)。 例如使用 python3.12 执行命令将会安装 3.12

创建虚拟环境确定放置目录 venv 模块作为脚本运行目录路径:

python -m venv tutorial-env

创建 tutorial-env 目录如果存在的话其中创建包含 Python 解释器副本各种支持文件目录

虚拟环境常用目录位置 .venv。 这个名称通常目录终端保持隐藏从而避免需要所在目录进行额外解释一般名称防止某些工具支持 .env 环境变量定义文件发生冲突

创建虚拟环境可以激活

Windows运行:

tutorial-env\Scripts\activate

UnixMacOS运行:

source tutorial-env/bin/activate

这个脚本bash shell编写如果使用 csh fish shell,应该改用 activate.csh activate.fish 脚本。)

激活虚拟环境改变终端提示显示正在使用虚拟环境修改环境使 python 命令运行安装特定 Python 版本例如

$ source ~/envs/tutorial-env/bin/activate
(tutorial-env) $ python
Python 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']
>>>

撤销激活虚拟环境输入:

deactivate

终端
12.3.
使用pip管理

可以使用名为 pip 程序安装升级移除软件包默认情况 pip Python Package Index 安装软件包可以 web 浏览器查看 Python Package Index。

pip
许多命令: "install", "uninstall", "freeze" 等等。 ( 安装 Python 模块 指南查看完整 pip 文档。)

可以通过指定名称安装最新版本

(tutorial-env) $ python -m pip install novas
Collecting novas
Downloading novas-3.1.1.3.tar.gz (136kB)
Installing collected packages: novas
Running setup.py install for novas
Successfully installed novas-3.1.1.3

可以通过提供名称后跟 == 版本安装特定版本

(tutorial-env) $ python -m pip install requests==2.6.0
Collecting requests==2.6.0
Using cached requests-2.6.0-py2.py3-none-any.whl
Installing collected packages: requests
Successfully installed requests-2.6.0

如果重新运行这个命令,pip 注意已经安装请求版本因而任何可以提供不同版本获取相应版本或者可以运行 python -m pip install --upgrade 软件包升级最新版本:

(tutorial-env) $ python -m pip install --upgrade requests
Collecting requests
Installing collected packages: requests
Found existing installation: requests 2.6.0
Uninstalling requests-2.6.0:
Successfully uninstalled requests-2.6.0
Successfully installed requests-2.7.0

python -m pip uninstall
后跟多个虚拟环境删除对应名称

python -m pip show
显示有关特定信息:

(tutorial-env) $ python -m pip show requests
---
Metadata-Version: 2.0
Name: requests
Version: 2.7.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.com
License: Apache 2.0
Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
Requires:

python -m pip list
显示所有虚拟环境安装:

(tutorial-env) $ python -m pip list
novas (3.1.1.3)
numpy (1.9.2)
pip (7.0.3)
requests (2.7.0)
setuptools (16.0)

python -m pip freeze
产生类似安装列表输出使用 python -m pip install 期望格式常见约定列表 requirements.txt 文件:

(tutorial-env) $ python -m pip freeze > requirements.txt
(tutorial-env) $ cat requirements.txt
novas==3.1.1.3
numpy==1.9.2
requests==2.7.0

然后可以 requirements.txt 交给版本控制作为应用程序一部分提供然后用户可以使用 install -r 安装所有必需

(tutorial-env) $ python -m pip install -r requirements.tx

t
Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
...
Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
...
Collecting requests==2.7.0 (from -r requirements.txt (line 3))
...
Installing collected packages: novas, numpy, requests
Running setup.py install for novas
Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0

pip
选项有关 pip 完整文档查阅 安装 Python 模块 指南编写软件包希望 Python Package Index 中时查阅 Python packaging user guide。