什么是虚拟环境?虚拟环境是一个 Python 环境,其中安装的 Python 解释器、库和脚本与安装在其他虚拟环境中的那些是隔离的,而且(默认情况下)安装在系统 Python 中的任何库(即作为操作系统的一部分安装的库)也是隔离的。
为什么需要虚拟环境?这是由于 pip 的特性决定的,同一个环境下,仅允许安装每个包的一个版本。假设,这里有三个包,分别为:A、B 和 C。A 包依赖于 B 包的 v1.0 版本,而 C 包依赖于 B 包的 v2.0 版本。如果我安装了 v1.0 的 B 包,那么 C 包就无法使用;如果安装了 v2.0 的 B 包,那么 A 包就无法使用。因此,在同一个环境下,由于只能安装一个版本的 B 包,导致 A 包和 C 包无法同时使用。
因此,我们需要创建多个 Python 的虚拟环境来解决上述问题。在环境 1 下安装 v1.0 的 B 包,然后就能使用 A 包,在环境 2 下安装 v2.0 的 B 包,就能使用 C 包。也就说,不同虚拟环境下的包是互不影响的,避免了包冲突问题。
此外,我们推荐每进行一个新的项目开发,就创建一个仅适用于该项目的虚拟 Python 环境。这样有助于包管理,同时还能非常清晰地列出项目开发用到的所有包,生成一键安装清单,方便后期的部署或复现。
本文将介绍三种最常用的创建 Python 虚拟环境的方式,让您轻松掌握创建及使用虚拟环境的方法。
Python2 版本创建虚拟环境常使用一个名为 virtualenv 的第三方包。从 Python3.3 以后,标准库就内置了一个名为 venv 的模块,我们可以用它来创建虚拟环境,完全替换 virtualenv。
不需要安装,Python3.3 及以上版本的内置标准模块。
python -m venv ENV_DIR
ENV_DIR
指定存放环境的目录,一般使用 venv
,这是一个不成文的规定。
虚拟环境的目录树结构如下(Windows):
.venv
├─pyvenv.cfg
├─Include
├─Lib
│ └─site-packages
│ ├─pip
│ ├─pip-20.2.3.dist-info
│ ├─pkg_resources
│ ├─setuptools-49.2.1.dist-info
│ ├─easy_install.py
│ └─__pycache__
└─Scripts
│ └─activate
│ └─activate.bat
│ └─Activate.ps1
│ └─deactivate.bat
│ └─easy_install-3.9.exe
│ └─easy_install.exe
│ └─pip.exe
│ └─pip3.9.exe
│ └─pip3.exe
│ └─python.exe
│ └─pythonw.exe
pyvenv.cfg
是一个配置文件,包含三个参数:
home
:指向运行命令的 Python 安装目录;include-system-site-packages
:是否使用系统 Python 环境中安装的包。默认是 false
,即不使用;version
:Python 版本号。.\ENV_DIR\Scripts\activate
source ENV_DIR/bin/activate
deactivate
删除整个环境的安装目录即可。
pipenv 将包管理工具 pip 和虚拟环境创建工具 virtualenv 有机地结合到了一起,实现了开发环境和生产环境依赖的分离,旨在构建专属于 Python 的开发工作流,达到类似于 npm,yarn 等工具的效果。
pip install pipenv
pipenv install
pipenv shell
exit
pipenv --rm
pipenv install 命令会根据系统默认 Python 版本来创建虚拟环境,并生成用于依赖包管理的 Pipfile
和 Pipfile.lock
文件。当你将项目分享给他人的时候,执行 pipenv install 命令会创建一个虚拟环境并自动安装 Pipfile
中指定的依赖包。
Pipfile
的生产环境:pipenv install requests
Pipfile
的开发环境:pipenv install pytest --dev
Pipfile
中列出的所有生产环境包:pipenv install
Pipfile
中列出的所有开发环境包:pipenv install --dev
Pipfile
中移除:pipenv uninstall requests
Pipfile
中移除):pipenv uninstall --all
Pipfile
中移除:pipenv uninstall --all-dev
将 Pipfile
和 Pipfile.lock
中对应的 pypi 源(https://pypi.org/simple)修改为国内镜像源,可以解决包下载速度慢的问题。
清华大学:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣:http://pypi.douban.com/simple/
poetry 类似 pipenv,也是一个依赖包管理工具。在 pipenv 上做了一些改进,简化了 Python 开发工作流。当然,也能创建虚拟环境。
pip install poetry
poetry init
,一路回车确认。然后使用 poetry shell
创建环境pipenv shell
(没有环境就创建环境并激活,有环境就直接激活)exit
pipenv env remove
(ENV_NAME
可通过 poetry env list
查看)Anaconda 是一个大型的环境管理系统,支持 Python/R 在内的多种语言。安装 Anaconda 或 Miniconda(精简版) 之后就能使用 conda 命令来创建和管理 Python 环境。
Miniconda软件安装教程(Windows)
Miniconda软件安装教程(Linux)
conda create -n ENV_NAME python=3.9
conda activate ENV_NAME
conda deactivate
conda env remove -n ENV_NAME
conda 可以创建多个不同版本的 Python 环境,而 venv 和 pipenv 只能根据系统中已有 Python 版本创建。
在虚拟环境中可通过 pip 命令来进行管理,常用的包管理命令如下(以 requests 包为例):
pip install requests
pip install --upgrade requests
pip uninstall requests
此外,安装指定版本的包可通过命令 pip install requests==2.18.4
实现。如果有多个包,可将包名及其对应的版本(中间用==
连接,不同包之间换行)写入一个名为 requirements.txt
的文件,然后通过如下命令安装:
pip install -r requirements.txt
同理,因为是在虚拟环境中,所以该环境中的安装的所有包都是开发需要用到的,没有其他项目的包,可以通过如下命令导出所有安装包的清单,方便后续复现或持续开发:
pip freeze > requirements.txt
- Python官方文档->venv
- Python用户指南->使用 pip 和虚拟环境安装包
- pipenv开源地址
- poetry开源地址