conda 环境中 conda 和 pip 安装之间的区别



我似乎经常问自己这个问题,最近改用 conda 环境(Anaconda(,但我最终在谷歌上搜索并且没有走得太远。

我现在在他们自己的 conda 环境中运行我的所有项目,因为我喜欢将所有内容保持独立,并尽可能少地依赖其他程序。例如,最近的环境:

conda create -n RL numpy tensorflow-gpu

然后我激活环境,并意识到"哦 - 我忘了安装健身房"。在这种情况下,这仅在 PIP 包管理器中可用,因此我只需键入pip install gym.但在其他情况下,如果软件包存在于 conda 和 pip 中,安装它的最佳方法是什么?

conda install packagepip install package

或者换句话说 - 有什么区别?

为了提供完整的画面,我在 Ubuntu 16.04 中运行所有内容,并根据项目在 python 2 和 3 之间切换。所以我的一些 conda 环境是 python 2,有些是 python 3。我发现有时 python 3 需要pip3 install,但并非总是如此 - 为什么会这样?

其次,我的路径链接到我的 Anaconda3 目录中的 python 设置。

我目前的想法是,如果我通过conda安装,它会直接安装到我的环境中,但通过pip它会安装到我的 anaconda3 站点包中,使其可用于我的 Anaconda3 目录下的所有 conda 环境。如果是这种情况,这意味着如果我在一个 conda 环境中pip install gym,它也应该在所有其他环境中可用 - 但据我所知,这不是环境的预期行为。

请随时纠正我的假设,并给我一些意义!

对于我对 Conda 的理解,它为您管理所有依赖项。例如,如果你有一个包(如熊猫(,需要另一个包(如numpy(,它将下载这两个包(在警告你之后(。

conda 变得很方便的地方是,有时一个特定的包需要另一个包的特定版本(例如 4.3 或更高版本(,它们可能是包之间的冲突。需求和冲突定义了一个数学问题,可以通过 SAT 求解器解决。

您可以在此处找到相关信息和链接:https://www.continuum.io/blog/developer/new-advances-conda-0

因此,每次安装新软件包时,它都会升级(如果冲突,有时会降级(其他软件包,以确保每个软件包的功能。就个人而言,我使用conda并且仅在包不受conda管理时才使用pip

如果您对conda感兴趣,另一个链接:https://jakevdp.github.io/blog/2016/08/25/conda-myths-and-misconceptions/

关于pip3,它是同时安装了 Python 2 和 Python 3 时使用的命名,以避免命令中的冲突。在 python 3 环境中,命令pip将等效于pip3

对于pip的行为,我可以确认安装仅在活动环境中完成,并且对其他人不可用

不同之处在于 conda 会知道它创建的新环境,但 pip 不会。您需要在环境中安装 pip。

如果您创建一个新环境并激活它:例如

conda create -n env_name
source activate env_name

然后使用 conda 安装 pip:

conda install pip

(陷阱警告(如果您运行which pip这应该提供新 conda 环境中 pip 安装的路径(如下所示(:

/anaconda3/envs/env_name/bin/pip

但是,仅仅运行pip install new_package似乎仍然不起作用,在 conda 环境中安装 pip 包时,您需要显式引用完整路径(例如 Tom Roth 的博客文章(

/anaconda3/envs/env_name/bin/pip install new_package

希望有帮助。

最新更新