我使用Anaconda(因为它很棒),并且通过conda install
可用的软件包为quite extensive。但是,有时我确实需要安装conda存储库中不可用的软件包,然后将其获取from pypi instead。
我的问题:当我运行命令conda update --all
时,conda还会更新这些pypi软件包吗?还是我必须单独更新它们? conda docs似乎没有答案。 This question and answer似乎表明不,conda不管理pypi软件包,但我仍然不确定。
否,conda update
和conda install
不会更新随pip
安装的软件包(或使用pip
安装的软件包。
这些conda
命令仅检查您的“默认” anaconda通道或使用-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
使用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
[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
但是可以用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)?
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
。