在conda环境中,conda和pip安装的区别

7

最近我经常问自己这个问题,因为我最近切换到使用conda环境(Anaconda),但是我最终只找到了一些Google上的资料。

现在我在它们各自的conda环境中运行所有项目,因为我喜欢保持一切分离,并尽可能少地依赖其他程序。例如,最近的一个环境:

conda create -n RL numpy tensorflow-gpu

然后我激活环境,意识到“哦——我忘记安装gym了”。在这种情况下,只能通过PIP软件包管理器获得,所以我只需键入pip install gym即可。但在其他情况下,如果该软件包同时存在于conda和pip中,最佳安装方法是什么? conda install 包名 pip install 包名 换句话说,两者有何区别?
为了提供完整的信息,我在Ubuntu 16.04上运行所有程序,并根据项目使用Python 2和3。因此,我的某些conda环境使用Python 2,而另一些则使用Python 3。我发现有时需要使用pip3 install来安装Python 3,但并非总是如此-这是为什么?
其次,我的路径链接到Anaconda3目录中的Python设置。
我的当前想法是,如果我通过conda安装,它会直接安装到我的环境中,但如果通过pip安装,则会安装到我的anaconda3 site-packages中,使它可用于Anaconda3目录下所有conda环境。如果是这样,这意味着如果我在一个conda环境中pip install gym,它也应该在其他所有环境中可用,但根据我所知,这不是环境的预期行为。
请随时纠正我的假设,让我清醒一些!

1
可能是What is the difference between pip and conda?的重复问题。 - darthbith
2个回答

3
根据我的理解,Conda可以帮你管理所有的依赖项。例如,如果你有一个需要另一个软件包(如numpy)的软件包(如pandas),它会下载这两个软件包(在警告后)。
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的行为,我可以确认安装只会在活动环境中进行,并且其他环境无法使用。

0

区别在于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

希望有所帮助。

1
我不知道早期版本如何,但在 conda 4.7 中,您可以在 conda 环境中安装 pip 包,而无需安装 pip 或使用其完整路径引用 pip。您还可以注意到,在创建新的 conda 环境时,pip 会自动安装。 - pgmank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接