conda是否使用pip install从pypi更新软件包?

Ric*_*ica 6 python pip pypi anaconda

我使用Anaconda(因为它是真棒),以及可用的包通过conda install相当广泛的.但是,我现在需要安装一个在conda存储库中不可用的软件包,所以从pypi获取它.

我的问题:当我运行命令时conda update --all,conda还会更新这些pypi包吗?或者我是否必须单独更新它们?该畅达文档似乎并没有包含一个答案.这个问题和答案似乎表明不,conda不管理pypi包,但我仍然不确定.

kal*_*anz 7

Conda 4.6 具有一项实验性功能,可实现与 pip 安装的软件包的互操作性。使用conda config --set pip_interop_enabled true. 可以由 conda “管理”(即删除)的非 conda 安装的 python 包可能会更新/更改以满足当前的解决方案。可管理的软件包通常是从轮子上安装的。与较新版本的 pip 一起安装的 Sdists 通常也是可管理的。但是,如果版本相同,则 conda 不会为 conda 软件包切换出非 conda 安装的软件包。

无法管理的非 conda 安装的 python 包将锚定环境,直到它们被其他方式删除。无法管理的软件包的一个例子是使用pip install -e.

所有这些都适用于conda update --all.


MSe*_*ert 6

不,conda update并且conda install不要更新安装的软件包pip(或使用它们安装它们pip).

这些conda命令只检查你的"默认"anaconda-channels或指定的那些-c,它们会忽略其他所有内容.一个例外是conda list显示安装的软件包pip,这些软件包标有<pip>,不会更新.

使用pip和的一个例子six:

$ conda create -n testenv python=3.5
Fetching package metadata .................
Solving package specifications: .

Package plan for installation in environment testenv:

The following NEW packages will be INSTALLED:

    pip:            9.0.1-py35_1
    python:         3.5.3-3
    setuptools:     27.2.0-py35_1
    vs2015_runtime: 14.0.25123-0
    wheel:          0.29.0-py35_0

Proceed ([y]/n)? y

$ activate testenv
Run Code Online (Sandbox Code Playgroud)

six使用pip(旧版本)安装:

(testenv) $ pip install six==1.6
Collecting six==1.6
  Downloading six-1.6.0-py2.py3-none-any.whl
Installing collected packages: six
Successfully installed six-1.6.0
Run Code Online (Sandbox Code Playgroud)

conda update不更新它(请注意,six未在"所有请求的包"中列出,但它已列在conda list)中:

(testenv) $ conda update --all
Fetching package metadata .................
Solving package specifications: .

# All requested packages already installed.
# packages in environment at testenv:
#
pip                       9.0.1                    py35_1
python                    3.5.3                         3
setuptools                27.2.0                   py35_1
vs2015_runtime            14.0.25123                    0
wheel                     0.29.0                   py35_0

(testenv) $ conda list
# packages in environment at testenv:
#
pip                       9.0.1                    py35_1
python                    3.5.3                         3
setuptools                27.2.0                   py35_1
six                       1.6.0                     <pip>
vs2015_runtime            14.0.25123                    0
wheel                     0.29.0                   py35_0
Run Code Online (Sandbox Code Playgroud)

但它可以升级为pip:

(testenv) $ pip install six --upgrade
Collecting six
  Using cached six-1.10.0-py2.py3-none-any.whl
Installing collected packages: six
  Found existing installation: six 1.6.0
    Uninstalling six-1.6.0:
      Successfully uninstalled six-1.6.0
Successfully installed six-1.10.0
Run Code Online (Sandbox Code Playgroud)

只是为了表明sixanaconda频道有一个更新的版本(当我这样做时被忽略conda update):

(testenv) $ conda install six
Fetching package metadata .................
Solving package specifications: .

Package plan for installation in environment testenv:

The following NEW packages will be INSTALLED:

    six: 1.10.0-py35_0

Proceed ([y]/n)?
Run Code Online (Sandbox Code Playgroud)