我已经在Windows 10上使用anaconda 64位python v3.6相当一段时间了,但是直到最近才发现conda-forge。我发现在conda-forge上实际上有很多使用pip安装的python软件包。
我想用conda-forge软件包替换pip软件包。我一直在手动执行此操作,但是这太麻烦了,因为它们有很多pip包。有没有简单的方法可以通过一个命令行自动用conda-forge软件包替换pip软件包?我愿意使用任何其他方便的方法来代替手动进行操作。
答案 0 :(得分:2)
除了一些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仓库中不存在相应的版本),则它会继续静默安装下一个软件包。
请注意,这具有很高的风险,您绝对应该检查安装的内容以及之后没有安装的内容。
答案 1 :(得分:2)
首先,我建议您创建环境并在其中安装库。这样,您的“基本”环境将保持干净,您可以随时恢复到原来的状态。如果这样做,则解决方法很容易:删除具有许多pip库的环境,并创建一个重新开始的新环境。 https://conda.io/docs/user-guide/tasks/manage-environments.html在此处说明了Conda环境。
也就是说,如果您想用conda-forge中的库自动替换已安装的pip库,则可以使用以下命令来完成。我在bash终端上进行了实验,但我想可以在Anaconda提示符或命令提示符下进行类似的操作。
但是通过命令执行这种操作可能会破坏您的环境。为了保持当前环境的安全,您应该通过以下方式保存信息:
conda env export > environment.yml
对于实验,创建一个仅安装pip
的测试环境。
conda create -y -n testenv pip
source activate testenv
然后通过pip安装两个库,tqdm
(在conda-forge
上可用)和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
现在我的环境如下所示。
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