如何从 Conda 环境中删除孤立包?
How do I remove orphan packages from a Conda environment?
我在 Conda 环境中卸载了一些包,并想删除其未使用的依赖项,即卸载孤立包。有这方面的命令吗?
conda clean -p
不是我想要的,因为它只从包缓存中删除未使用的包,但如果包仍安装在环境中,则不会将其标记为未使用。
我认为 Conda 在使用 conda remove
命令时会自动执行此操作,因为它会触发完全重新求解并仅保留新求解的版本。但是,为了这个问题,我将假定前提是理所当然的(也许你从文件系统中删除了一些东西,或者使用了强制标志等)。
我本来打算建议 --prune
标志(conda env update
的一部分),但它似乎已经失去了它的功能。相反,一种方法是重建环境。类似于:
# save a full backup, just in case
conda env export -n foo > foo.full.yaml
# this is the version we’re interested in
conda env export -n foo --from-history > foo.min.yaml
# remove the old one
conda env remove -n foo
# recreate it from already installed packages
conda env create -n foo -f foo.min.yaml --offline
# (optional) clean up unused packages
# conda clean -p
不幸的是,不是单线的。希望 --offline
标志发挥作用——主要是我们希望它仅从已安装的包中重新创建环境。
Pip 安装包
请注意,上述方法不适用于 pip
安装的软件包。虽然 Conda 可以检测 pip
安装的包的存在,但它不会在 conda-meta/history
文件中跟踪它们,因此在使用 --from-history
标志时不会包含它们。
由于 foo.full.yaml
将包括 pip
-已安装的软件包,一个可能的解决方法是编辑 foo.min.yaml
以专门包括该部分。
我在 Conda 环境中卸载了一些包,并想删除其未使用的依赖项,即卸载孤立包。有这方面的命令吗?
conda clean -p
不是我想要的,因为它只从包缓存中删除未使用的包,但如果包仍安装在环境中,则不会将其标记为未使用。
我认为 Conda 在使用 conda remove
命令时会自动执行此操作,因为它会触发完全重新求解并仅保留新求解的版本。但是,为了这个问题,我将假定前提是理所当然的(也许你从文件系统中删除了一些东西,或者使用了强制标志等)。
我本来打算建议 --prune
标志(conda env update
的一部分),但它似乎已经失去了它的功能。相反,一种方法是重建环境。类似于:
# save a full backup, just in case
conda env export -n foo > foo.full.yaml
# this is the version we’re interested in
conda env export -n foo --from-history > foo.min.yaml
# remove the old one
conda env remove -n foo
# recreate it from already installed packages
conda env create -n foo -f foo.min.yaml --offline
# (optional) clean up unused packages
# conda clean -p
不幸的是,不是单线的。希望 --offline
标志发挥作用——主要是我们希望它仅从已安装的包中重新创建环境。
Pip 安装包
请注意,上述方法不适用于 pip
安装的软件包。虽然 Conda 可以检测 pip
安装的包的存在,但它不会在 conda-meta/history
文件中跟踪它们,因此在使用 --from-history
标志时不会包含它们。
由于 foo.full.yaml
将包括 pip
-已安装的软件包,一个可能的解决方法是编辑 foo.min.yaml
以专门包括该部分。