【问题标题】: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 包,但我仍然不确定。

【问题讨论】:

    标签: python pip anaconda pypi


    【解决方案1】:

    不,conda updateconda install 不要更新使用 pip 安装的软件包(或使用 pip 安装它们)。

    这些conda 命令仅检查您的“默认” anaconda 通道或-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
    

    安装sixpip(旧版本):

    (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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-01-31
          • 1970-01-01
          • 2018-07-27
          • 2019-07-01
          • 1970-01-01
          • 2018-03-25
          • 2022-01-08
          相关资源
          最近更新 更多