用condaforge包替换pip包的简单方法

2024-06-02 06:14:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Windows10上使用Anaconda64位PythonV3.6已经有一段时间了,但直到最近才发现conda forge。我发现在condaforge上有很多我用pip安装的python包。在

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


Tags: pip方法命令行手动conda手工forge地用
2条回答

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

一个问题是conda的存储库可能不够全面,不能涵盖所有版本。假设所有版本都可以工作,下面是一个简单的脚本:

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

因为pip需要==来固定版本,而{}需要{},所以只要{}输入的格式正确。在

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

^{pr2}$

我甚至创建了一个沙盒conda环境,以防把python搞砸。这将安装pip中的任何内容,如果失败(即conda repos中不存在相应的版本),那么它将静默地继续安装下一个包。在

请注意,这是高风险的,您应该明确检查您安装了什么,以及您之后没有安装什么。在

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

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

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

conda env export > environment.yml

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

^{pr2}$

然后通过pip安装两个库,tqdm(可在conda-forge)和{}(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 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  

相关问题 更多 >