2024-06-02 06:14:52 发布
网友
我在Windows10上使用Anaconda64位PythonV3.6已经有一段时间了,但直到最近才发现conda forge。我发现在condaforge上有很多我用pip安装的python包。在
我想用conda forge包替换pip包。我一直在手工做这件事,但这太乏味了,因为他们有很多pip包。有没有一种简单的方法可以用一个命令行自动地用conda forge包替换pip包?我愿意使用任何其他方便的方法,而不是手动操作。在
除了一些bash黑客之外,没有其他惯用的方法来解决这个问题:
一个问题是conda的存储库可能不够全面,不能涵盖所有版本。假设所有版本都可以工作,下面是一个简单的脚本:
conda install $(pip freeze | sed 's/==/=/g')
因为pip需要==来固定版本,而{}需要{},所以只要{}输入的格式正确。在
pip
==
如果它不起作用,那么你就必须采用风险更大的方法:
我甚至创建了一个沙盒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的测试环境。在
然后通过pip安装两个库,tqdm(可在conda-forge)和{}(conda cloud上不可用)。在
tqdm
conda-forge
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
现在我的环境如下所示。在
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
除了一些bash黑客之外,没有其他惯用的方法来解决这个问题:
一个问题是conda的存储库可能不够全面,不能涵盖所有版本。假设所有版本都可以工作,下面是一个简单的脚本:
因为}需要{},所以只要{}输入的格式正确。在
pip
需要==
来固定版本,而{如果它不起作用,那么你就必须采用风险更大的方法:
^{pr2}$我甚至创建了一个沙盒conda环境,以防把python搞砸。这将安装
pip
中的任何内容,如果失败(即conda repos中不存在相应的版本),那么它将静默地继续安装下一个包。在请注意,这是高风险的,您应该明确检查您安装了什么,以及您之后没有安装什么。在
首先,我建议您创建环境并在其中安装库。这样,你的“基地”环境保持干净,你可以随时回来。如果您这样做,那么修复很简单:删除包含许多pip库的环境,并创建一个新的环境来重新开始。 Conda环境在这里解释https://conda.io/docs/user-guide/tasks/manage-environments.html。在
这就是说,如果您想用condaforge中的pip库自动替换已安装的pip库,那么您可能可以使用下面的命令来实现。我在bash终端上进行了试验,但我想在Anaconda提示符或命令提示符上也可以进行类似的操作。在
但通过命令执行此类操作有可能破坏您的环境。为了以防万一,您应该通过以下方式保存信息:
对于这个实验,创建一个只安装
^{pr2}$pip
的测试环境。在然后通过pip安装两个库,}(conda cloud上不可用)。在
tqdm
(可在conda-forge
)和{我现在的环境如下所示。在
现在,我们要执行以下操作: 对于通过
pip
安装的每个库,如果它在conda-forge
上,请安装它并卸载pip
中的库。在这里有一个命令可以这样做。。。在
现在我的环境如下所示。在
相关问题 更多 >
编程相关推荐