【问题标题】:Easy way to replace pip packages with conda-forge packages用 conda-forge 包替换 pip 包的简单方法
【发布时间】:2019-01-30 12:44:25
【问题描述】:

我在 Windows 10 上使用 anaconda 64 位 python v3.6 已经有一段时间了,但直到最近才发现 conda-forge。我发现我使用 pip 安装的许多 python 包实际上在 conda-forge 上可用。

我想用 conda-forge 包替换 pip 包。我一直在手动执行此操作,但这太乏味了,因为它们有很多 pip 包。是否有一种简单的方法可以使用单个命令行自动将 pip 包替换为 conda-forge 包?我愿意使用任何其他方便的方法而不是手动操作。

【问题讨论】:

  • 您好,我是 conda-forge 核心的成员。拥有可以将 PyPI 包转换为 conda-forge 包的东西会很棒!这是我们中的一些人希望看到的事情。 conda-smithy 项目是开发此项目的合适地点

标签: python python-3.x pip anaconda conda


【解决方案1】:

除了一些 bash 黑客之外,没有惯用的方法来解决这个问题:

一个问题是 conda 的存储库可能没有那么全面,并且没有涵盖所有版​​本。假设所有版本都可以工作,这里有一个简单的脚本:

conda install $(pip freeze | sed 's/==/=/g')

因为pip 需要== 来固定版本,而conda 需要=,只需sed 输入格式正确。

如果它不起作用,那么你必须采用风险更高的方法:

(sandbox) ❯ for pkg in $(pip freeze | sed 's/==/=/g'); do conda install -y $pkg; done

我什至创建了一个沙盒 conda 环境,以防我搞砸了我的 python。这将安装您在pip 中的所有内容,如果失败(即 conda repos 中不存在相应版本),则它会静默继续安装下一个包。

请注意,这是非常危险的,您一定要检查您安装了什么以及之后没有安装什么。

【讨论】:

    【解决方案2】:

    首先,我建议您创建环境并为其安装库。这样,您的“基础”环境就会保持清洁,您可以随时返回它。如果你这样做了,那么修复很简单:删除包含许多 pip 库的环境并创建一个新环境以重新开始。 Conda 环境在这里解释https://conda.io/docs/user-guide/tasks/manage-environments.html

    也就是说,如果您想用 conda-forge 中的 pip 库自动替换已安装的 pip 库,您可能可以使用以下命令执行此操作。我在 bash 终端上进行了实验,但我想类似的可以在 Anaconda 提示符或命令提示符下完成。

    但是通过命令做这种事情有破坏你的环境的风险。为了保持你当前的环境以防万一,你应该通过以下方式保存信息:

    conda env export > environment.yml
    

    为了实验,创建一个只安装pip的测试环境。

    conda create -y -n testenv pip
    source activate testenv
    

    然后通过 pip 安装两个库,tqdm(在 conda-forge 上可用)和 janome(在 conda cloud 上不可用)。

    pip install tqdm janome
    

    我的环境现在如下所示。

    conda list
    
    ## Name                    Version                   Build  Channel
    ca-certificates           2018.03.07                    0  
    certifi                   2018.8.13                py37_0  
    Janome                    0.3.6                     <pip>
    libedit                   3.1.20170329         h6b74fdf_2  
    libffi                    3.2.1                hd88cf55_4  
    libgcc-ng                 8.2.0                hdf63c60_1  
    libstdcxx-ng              8.2.0                hdf63c60_1  
    ncurses                   6.1                  hf484d3e_0  
    openssl                   1.0.2p               h14c3975_0  
    pip                       10.0.1                   py37_0  
    python                    3.7.0                hc3d631a_0  
    readline                  7.0                  ha6073c6_4  
    setuptools                40.0.0                   py37_0  
    sqlite                    3.24.0               h84994c4_0  
    tk                        8.6.7                hc745277_3  
    tqdm                      4.25.0                    <pip>
    wheel                     0.31.1                   py37_0  
    xz                        5.2.4                h14c3975_4  
    zlib                      1.2.11               ha838bed_2  
    

    现在,我们要执行以下操作: 对于通过pip 安装的每个库,如果它在conda-forge 上,则安装它并从pip 卸载。

    这是执行此操作的命令...

    for lib in `conda list | grep '<pip>' | cut -f 1 -d ' '`; \
    do 
      echo "*****checking $lib*****"; \
      conda install -y -c conda-forge $lib && \
      pip uninstall -y $lib; \
    done
    
    • 第 1 行:收集您通过 pip 安装的库。
    • 第 4 行:从 conda-forge 安装相同的库。
    • 第 5 行:如果从 conda-forge 安装,请卸载 pip 之一。

    现在我的环境如下所示。

    conda list
    
    # Name                    Version                   Build  Channel
    ca-certificates           2018.8.13            ha4d7672_0    conda-forge
    certifi                   2018.4.16                py37_0    conda-forge
    Janome                    0.3.6                     <pip>
    libedit                   3.1.20170329         h6b74fdf_2  
    libffi                    3.2.1                hd88cf55_4  
    libgcc-ng                 8.2.0                hdf63c60_1  
    libstdcxx-ng              8.2.0                hdf63c60_1  
    ncurses                   6.1                  hf484d3e_0  
    openssl                   1.0.2o               h470a237_1    conda-forge
    pip                       10.0.1                   py37_0  
    python                    3.7.0                hc3d631a_0  
    readline                  7.0                  ha6073c6_4  
    setuptools                40.0.0                   py37_0  
    sqlite                    3.24.0               h84994c4_0  
    tk                        8.6.7                hc745277_3  
    tqdm                      4.24.0                     py_1    conda-forge
    wheel                     0.31.1                   py37_0  
    xz                        5.2.4                h14c3975_4  
    zlib                      1.2.11               ha838bed_2  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-01
      • 2019-09-06
      • 2020-12-27
      • 2021-02-12
      • 2018-10-19
      • 2016-05-03
      • 2019-01-22
      • 2020-10-26
      相关资源
      最近更新 更多