Python中为什么在使用Anaconda时还需要用virtualenv?

我在用最新版 pycharm 的时候, 配置了 anaconda3, 但默认还要新建 virtualenv. 但新建之后, 里面的 python3 环境是完全干净的, 并没有 anacaonda 的那些科学计算库, 那为什么 anaconda3 还需要使用 virtualenv 呢?有什么好处吗?


Python中为什么在使用Anaconda时还需要用virtualenv?
23 回复

你说的是 condaenv 还是 virtualenv ?


Anaconda本身已经通过conda环境提供了强大的环境隔离功能,所以对于纯Python项目,直接用conda create -n myenv python=3.9 创建环境就足够了,没必要再套一层virtualenv或venv。

但有些情况你可能会遇到需要混用的情况:

  1. 你项目里大部分依赖是PyPI的纯Python包,但有一两个核心包(比如TensorFlow、PyTorch)用conda安装更稳定。这时可以在conda环境里pip install virtualenv,然后在里面创建virtualenv来管理那些PyPI包。不过更常见的做法是直接在conda环境里用pip安装PyPI包,conda能识别它们。
  2. 团队或公司强制规定使用virtualenv/venv作为标准工具,而你个人习惯用Anaconda。为了统一,你可能会在conda基础环境里安装virtualenv,再创建符合公司规范的虚拟环境。

举个例子,如果你在conda环境里还需要一个更轻量级的纯pip虚拟环境,可以这样操作(虽然通常不推荐):

# 假设已在conda环境 'my_conda_env' 中
conda activate my_conda_env
# 安装virtualenv
pip install virtualenv
# 在项目目录创建新的virtualenv
virtualenv venv
# 激活这个virtualenv(在conda环境内部)
# On Windows:
venv\Scripts\activate
# On Unix/MacOS:
source venv/bin/activate
# 现在你实际上在一个嵌套的虚拟环境里

总结:多数情况下没必要混用,直接用conda管理环境更干净。

virtualenv, conda 的话有什么区别嘛

环境配置没有选好路径,不用管自动新建的那个

anaconda 和 virtualenv 两个没关系,anaconda 功能更多一些,也包括创建虚拟环境

anaconda3 是一个母仓库,用 venv 建立多个平行的子工作环境。

两个没关系吧,Pycharm 能选择的

虚拟环境和 anaconda 没啥关系,我以前用 anaconda2.7 后来项目全部使用 3.6 所以我直接新建个个虚拟环境方便快捷

同样被这几个东西绕晕了 网上也没找到太简洁的答案

你可以这样想也这样用,但用 env 的目的是在一个 anaconda 大的版本下建立力度更小的虚拟环境
比如 10 个项目依赖 py3.6,你不用用 anaconda 建立十个 py3.6 版本项目环境,你可以只用建立一个 py36 的环境,然后基于这个 3.6 版本建立十个虚拟环境,比如使用 pipenv 进行管理

你说得对

这个我知道,但是用 virtualenv 新建的仓库是空的,没有 anaconda 的那些包, 这样使用 anaconda 的意义何在呢?

只是我看默认是新建虚拟库, 但新建的虚拟库并没有 anaconda 的第三方计算包, 不知道这样的意义何在

但是这小的虚拟环境, 我看并没有继承 anaconda 的包, 既然这样, 为何不直接用干净的 python 呢

我也觉得没关系…但默认是使用虚拟环境, 所以我觉得这应该有什么意义把

你们的 anaconda 可以建 virtualenv ?我试了好多次都不可以

大哥,都说了这两个没关系,anaconda 的好处是不仅能创建虚拟环境,还能创建不同版本( 2,3 )的 python 虚拟环境,同时 windows 下有些包用 anaconda 更加容易安装,创建虚拟环境用下面的命令
conda create -n your_env_name python=X.X(2.7、3.6 等)

按我的理解,anaconda 里面集成了许多常用的包,这些包很常用,并且相互可能有依赖,如果都自己安装要花很多时间,所以给你了一个集成各种常用包的安装文件,基本不需要自己 pip 或 conda 了,当作科学计算的环境。env 是 pycharm 默认配置的,pycharm 写可能给别人用的项目,自然包越少越好,这样拿到其他环境可以确定只需要某某几个包就能正常运行,而不是说我电脑上有几百个包,你全装一遍肯定能运行。
你要是用 jupyter,spyder,vscode 都不会让你新建虚拟环境。

我的理解是
virtualenv 用来创建最小环境. 只带标准库. 不同环境是不同容器. 不同环境安装的软件互相版本独立.
pyenv 能用 virtualenv 创建环境, 并指定解释器版本.
conda 同 pyenv, 能指定解释器. 是用 virtualenv 创建的环境, 并在此环境安装好科学计算库.

刚装好 conda 手贱 rm 删了…

那等于说, 这里建立虚拟环境, 主要是用 anaconda 方便建立各种版本的环境的这个特点, 而跟自带的各种科学库没关系?

对呀,Python 创建虚拟环境的方法太多了,而且多多少少都有点问题,用 anaconda 最统一,最省心,不管 win 还是 Linux 下都没有问题,同时在 win 下安装包的时候用 anaconda 比 pip 安装要好一些,pip 有时候会安装失败,所以使用 anaconda,学习 conda 命令是最划算的,否则那么多创建虚拟环境的工具,别说用了,就是选择用哪个都要花费你不少时间,最近好像又出了新的工具。anaconda 还有 minianaconda 这个版本,不用科学计算,安装这个就可以,小很多,好像几十兆吧

这样~最近正在安装人脸识别的一个包,没 Windows 版, 真麻烦啊

回到顶部