Conda会更新使用pip install安装的从pypi下载的包吗?

36 浏览
0 Comments

Conda会更新使用pip install安装的从pypi下载的包吗?

我使用Anaconda(因为它很棒),而且通过conda install可用的包非常广泛。然而,偶尔我需要安装一个没有在conda存储库中的包,所以从pypi获取它。

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

admin 更改状态以发布 2023年5月24日
0
0 Comments

Conda 4.6有一个实验性功能,可以使其与pip安装的包相互运作。使用conda config --set pip_interop_enabled true。可以通过conda进行“管理”的非conda安装的python包(例如删除)可以被更新/更改以满足当前解决方案。可管理的包通常是从wheels安装的。使用较新版本的pip安装的sdist通常也可以管理。但是,如果非conda包的版本相同,则conda不会将其替换为conda包。

不能被管理的非conda安装的python包将锚定环境,直到它们被其他方式删除。不可管理的包的一个示例是使用pip install -e进行的“可编辑”安装。

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

0
0 Comments

不,conda updateconda install不会更新通过pip安装的包(或者使用pip安装它们)。

这些conda命令只会检查您的“默认”anaconda通道或使用-c指定的通道,它们会忽略其他一切。一个例外是conda list,它也会显示使用pip安装的包,这些包用标记,并且不会被更新。

使用pipsix的一个例子:

$ 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

使用pip(旧版本)安装six

(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

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                     
vs2015_runtime            14.0.25123                    0
wheel                     0.29.0                   py35_0

但可以使用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

只是为了展示anaconda通道中有一个更新的six版本(当我执行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)?

0