Python的venv模块和Anaconda的conda命令都用于创建和管理Python的虚拟环境,这些环境是隔离的,能够防止不同项目的库版本冲突。
venv
命令python3 -m venv <目录>就可以创建一个独立的Python运行环境。
观察bin目录的内容,里面有python3、pip3等可执行文件,实际上是链接到Python系统目录的软链接。
继续进入bin目录,Linux/Mac用source activate,Windows用activate.bat 激活该venv环境。
退出当前环境用: deactivate
如果不再使用某个venv,例如proj101env,删除它也很简单。
首先确认该venv没有处于“激活”状态,然后直接把整个目录proj101env删掉就行。
conda
常见的conda命令。
# 查看conda版本,验证是否安装
conda -V
# 更新conda至最新版本
conda update conda
# 更新所有包
conda update --all
# 更新指定的包
conda update package_name
# 创建名为env_name的新环境,并在该环境下安装名为package_name 的包,
# 可以指定新环境的版本号,例如:conda create -n python3 python=python3.7 numpy pandas,
# 创建了python3环境,python版本为3.7,同时还安装了numpy pandas包
conda create -n env_name package_name
# 切换至env_name环境
conda activate env_name
退出环境
conda deactivate
# 显示所有已经创建的环境
conda info -e
# 或者使用
conda env list
# 复制old_env_name为new_env_name
conda create --name new_env_name --clone old_env_name
# 删除环境
conda remove --name env_name --all
# 查看所有已经安装的包
conda list
# 在当前环境中安装包
conda install package_name
# 在指定环境中安装包
conda install --name env_name package_name
# 删除指定环境中的包
conda remove -- name env_name package
# 采用上一步方法删除环境失败时,可采用这种方法
conda env remove -n env_name
# 删除当前环境中的包
conda remove package
# 更新默认的conda版本
# 先检查并确认是 base 这个环境
conda env list
# 执行下面命令做默认conda的升级。
conda update anaconda
区别
尽管他们的功能相似,但是他们之间存在一些主要的区别。
包管理器
venv使用Python的内置包管理器pip来管理软件包。Pip是Python的官方包管理器,包含了Python的大部分库。
而conda是Anaconda distribution的包管理器,可以管理Python以及其他非Python的包。
跨平台性
venv是Python的一个内置模块,因此在任何Python环境中都可用。
而conda只在Anaconda distribution中可用。如果你没有安装Anaconda,你就不能使用conda命令。
环境隔离程度
两者都能隔离Python的版本和库,但是conda提供了更深层次的隔离。
例如,conda可以管理不同的Python解释器版本,还可以管理非Python的包,如R包,或是系统级别的库。
库的覆盖面
如果你需要的库是Python的,那么venv和conda都可以很好地完成工作。
但是,如果你需要的库是非Python的,或者是一些科学计算的库,例如numpy, scipy, tensorflow等,那么使用conda会更方便,因为Anaconda distribution包含了这些库的预编译版本,可以方便地安装。
适用场景
哪一个更适合你,取决于你的具体需求。
venv:
如果你的项目只需要Python库,并且不需要特定版本的Python解释器,那么venv是一个很好的选择。这也是大多数Python开发者的默认选择。
conda:
如果你的项目需要一些科学计算的库,或者需要管理非Python的包,那么conda可能是更好的选择。
Anaconda distribution被设计为用于数据科学和机器学习的项目,包含了许多预编译的科学计算库,可以节省你的安装时间。
此外,如果你需要管理不同版本的Python解释器,那么conda也是一个很好的选择。