conda 如何知道哪些包未被使用?
How does conda know which packages are unused?
conda clean --packages
从可写包缓存中删除未使用的包。这是什么 'writable package cache',conda 如何检测它未被使用?
它实际上是 运行 遍历所有 python 文件并寻找依赖项吗?或者它是否保留了之前 运行 的记录?
它会删除我通过 pip 安装但从未使用过的软件包吗?
Conda 很难计算links
以尽量减少物理磁盘的使用。也就是说,lib/libz.a
的单个物理副本可能会从包缓存中(它首先被解包的地方)引用,然后在多个环境中引用。
Conda 通过计算每个包中文件的硬 link 数量来确定是否有资格从包缓存中删除包。 Hardlink 计数由文件系统跟踪,而不是由 Conda 跟踪。 the relevant code的大纲是:
# keep a list of packages to remove
pkgs_to_remove = []
# look in all package caches (there can be multiple)
for pkg_cache in pkgs_dirs:
# check all packages
for pkg in pkg_cache:
# assume removable unless...
remove_pkg = True
for file in pkg:
# is there evidence that it is linked elsewhere?
if num_links(file) > 1:
# if so, don't remove, and move on
remove_pkg = False
break
# add it to list is removable
if remove_pkg:
pkgs_to_remove.append(pkg)
# output some info on `pkgs_to_remove`
# check if user wants to execute removal
也就是说,如果一个包中的任何文件有多个 link,那么 Conda 将断定它在另一个环境中使用,然后继续下一个包。
请注意,文件系统不会跟踪符号 links(a.k.a.、symlinks、softlinks),而 Conda 不会t 跟踪它们,因此,Conda 会结合 allow_softlinks
设置警告清洁包。
conda clean --packages
从可写包缓存中删除未使用的包。这是什么 'writable package cache',conda 如何检测它未被使用?
它实际上是 运行 遍历所有 python 文件并寻找依赖项吗?或者它是否保留了之前 运行 的记录?
它会删除我通过 pip 安装但从未使用过的软件包吗?
Conda 很难计算links
lib/libz.a
的单个物理副本可能会从包缓存中(它首先被解包的地方)引用,然后在多个环境中引用。
Conda 通过计算每个包中文件的硬 link 数量来确定是否有资格从包缓存中删除包。 Hardlink 计数由文件系统跟踪,而不是由 Conda 跟踪。 the relevant code的大纲是:
# keep a list of packages to remove
pkgs_to_remove = []
# look in all package caches (there can be multiple)
for pkg_cache in pkgs_dirs:
# check all packages
for pkg in pkg_cache:
# assume removable unless...
remove_pkg = True
for file in pkg:
# is there evidence that it is linked elsewhere?
if num_links(file) > 1:
# if so, don't remove, and move on
remove_pkg = False
break
# add it to list is removable
if remove_pkg:
pkgs_to_remove.append(pkg)
# output some info on `pkgs_to_remove`
# check if user wants to execute removal
也就是说,如果一个包中的任何文件有多个 link,那么 Conda 将断定它在另一个环境中使用,然后继续下一个包。
请注意,文件系统不会跟踪符号 links(a.k.a.、symlinks、softlinks),而 Conda 不会t 跟踪它们,因此,Conda 会结合 allow_softlinks
设置警告清洁包。