用 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 包。有没有一种简单的方法可以通过单个命令行自动将 pip 包替换为 conda-forge 包?我愿意使用任何其他方便的方法而不是手动操作。
除了一些 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 中不存在相应的版本),那么它会默默地继续安装下一个包。
请注意,这是非常危险的,您一定要检查安装了哪些以及之后没有安装哪些。
首先,我建议您创建环境并为其安装库。这样,您的 "base" 环境就会保持干净,您可以随时返回。如果这样做,那么修复很简单:删除具有许多 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
(在 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 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
我在 Windows 10 上使用 anaconda 64 位 python v3.6 已经有一段时间了,但直到最近才发现 conda-forge。我发现我使用 pip 安装的许多 python 包实际上在 conda-forge 上可用。
我想用 conda-forge 包替换 pip 包。我一直在手动执行此操作,但它太乏味了,因为它们有很多 pip 包。有没有一种简单的方法可以通过单个命令行自动将 pip 包替换为 conda-forge 包?我愿意使用任何其他方便的方法而不是手动操作。
除了一些 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 中不存在相应的版本),那么它会默默地继续安装下一个包。
请注意,这是非常危险的,您一定要检查安装了哪些以及之后没有安装哪些。
首先,我建议您创建环境并为其安装库。这样,您的 "base" 环境就会保持干净,您可以随时返回。如果这样做,那么修复很简单:删除具有许多 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
(在 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 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