繁体   English   中英

使用conda-forge包替换pip包的简便方法

[英]Easy way to replace pip packages with conda-forge packages

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

我想用conda-forge包替换pip包。 我一直在手动这样做,但它太繁琐,因为它们是很多pip包。 有一种简单的方法可以使用一个命令行自动用conda-forge软件包替换pip软件包吗? 我愿意使用任何其他方便的方法而不是手动操作。

除了一些bash hackery之外,没有惯用的方法可以解决这个问题:

问题是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中不存在相应的版本),那么它会默默地继续安装下一个包。

请注意,这是非常危险的,您应该检查您安装的内容以及之后没有安装的内容。

首先,我建议您创建环境并为其安装库。 这样,您的“基础”环境保持干净,您可以随时回来。 如果您这样做,那么修复很容易:删除具有许多pip库的环境并创建一个新环境以重新开始。 这里解释了Conda环境https://conda.io/docs/user-guide/tasks/manage-environments.html

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

但是按命令执行此类操作可能会破坏您的环境。 为了保持您当前的环境以防万一,您应该通过以下方式保存信息:

conda env export > environment.yml

对于实验,创建一个仅安装pip的测试环境。

conda create -y -n testenv pip
source activate testenv

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

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 one。

现在我的环境如下所示。

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  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM