conda 是不是从使用 pip install 安装的 pypi 更新软件包?
Posted
技术标签:
【中文标题】conda 是不是从使用 pip install 安装的 pypi 更新软件包?【英文标题】:Does conda update packages from pypi installed using pip install?conda 是否从使用 pip install 安装的 pypi 更新软件包? 【发布时间】:2017-10-31 02:57:06 【问题描述】:我使用Anaconda(因为它很棒),通过conda install
提供的包是quite extensive。但是有时我确实需要安装一个在 conda 存储库中不可用的包,所以得到它from pypi instead。
我的问题:当我运行命令conda update --all
时,conda 是否也会更新这些 pypi 包?还是我必须单独更新它们? conda docs 似乎不包含对此的答案。 This question and answer 似乎表明不,conda 不管理 pypi 包,但我仍然不确定。
【问题讨论】:
【参考方案1】:不,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)?
【讨论】:
【参考方案2】:Conda 4.6 具有一项实验性功能,可实现与 pip 安装包的互操作性。使用conda config --set pip_interop_enabled true
。可以由 conda“管理”(即删除)的非 conda 安装的 python 包可以更新/更改以满足当前的解决方案。可管理的软件包通常是从***上安装的。使用较新版本的 pip 安装的 Sdist 通常也易于管理。但是,如果版本相同,conda 不会将未安装 conda 的包切换为 conda 包。
无法管理的非 conda 安装的 python 包将锚定环境,直到它们被其他方式删除。无法管理的包的一个示例是使用 pip install -e
的“可编辑”安装。
所有这些都适用于conda update --all
。
【讨论】:
【参考方案3】:这个问题很老,但这里有一个批处理脚本,可能有助于在 Windows 上自动执行此过程。它涉及通过 conda list
并找到标有 pypi 标签的软件包,然后使用 pip --upgrade
整体升级(假设它们已过时;否则标准 Requirement already up-to-date
消息将被返回)。
将以下内容放入批处理文件(例如 condapip.bat)并尝试一下:
@echo off
set packages=pip install --upgrade
for /f "tokens=1" %%i in ('conda list ^| findstr /R /C:"pypi"') do (call :join %%i)
@echo on
%packages%
@echo off
goto :eof
:join
set packages=%packages% %1
goto :eof
【讨论】:
以上是关于conda 是不是从使用 pip install 安装的 pypi 更新软件包?的主要内容,如果未能解决你的问题,请参考以下文章
ubuntu更换pip install,apt-get,conda install 成国内源