簡體   English   中英

conda 是否從使用 pip install 安裝的 pypi 更新包?

[英]Does conda update packages from pypi installed using pip install?

我使用Anaconda (因為它很棒),並且通過conda install提供的軟件包非常廣泛 但是,有時我確實需要安裝一個在 conda 存儲庫中不可用的軟件包,因此可以從 pypi獲取它。

我的問題:當我運行命令conda update --all ,conda 是否也會更新這些 pypi 包? 還是我必須單獨更新它們? conda 文檔似乎不包含對此的答案。 這個問答似乎表明不,conda 不管理 pypi 包,但我仍然不確定。

不, conda updateconda install不更新安裝的軟件包pip (或使用安裝它們pip )。

這些conda命令僅檢查您的“默認”anaconda-channels 或使用-c指定的通道,它們會忽略其他所有內容。 一個例外是conda list ,它也顯示了用pip安裝的包,這些包用<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                     <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

這個問題很老,但這里有一個批處理腳本可能有助於在Windows上自動化這個過程。 它涉及通過conda list並查找標有pypi標簽的包,然后使用pip --upgrade en masse 對其進行升級(假設它們已過時;否則標准的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM