Python创建虚拟环境的三种方式(venv | pipenv | conda)
Posted Xavier Jiezou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python创建虚拟环境的三种方式(venv | pipenv | conda)相关的知识,希望对你有一定的参考价值。
文章目录
引言
什么是虚拟环境?虚拟环境是一个 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 虚拟环境的方式,让您轻松掌握创建及使用虚拟环境的方法。
教程
venv
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 版本号。
- 激活环境
- Windows
.\\ENV_DIR\\Scripts\\activate
- Unix/macOS
source ENV_DIR/bin/activate
- 退出环境
deactivate
- 删除环境
删除整个环境的安装目录即可。
pipenv
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
- 卸载指定包并从
- 配置 pypi 镜像
将 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/
conda
Anaconda 是一个大型的环境管理系统,支持 Python/R 在内的多种语言。安装 Anaconda 或 Miniconda(精简版) 之后就能使用 conda 命令来创建和管理 Python 环境。
安装
用法
- 创建环境
conda create -n ENV_NAME python=3.9
- 激活环境
conda activate ENV_NAME
- 退出环境
conda deactivate
- 删除环境
conda env remove -n ENV_NAME
总结
- venv:内置模块,小巧轻便,使用灵活;
- pipenv:Python 开发专属,定义了一套完整的 Python 开发工作流;
- conda:大型的环境管理系统,Python 开发必备软件。
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 | pipenv | conda)的主要内容,如果未能解决你的问题,请参考以下文章