发现Conda托管的包在包缓存中没有条目



尝试使用conda-pack 时

conda pack -n myenv

显示了以下消息

Conda-managed packages were found without entries in the package cache.  This is usually due to 'conda clean -p' being unaware of symlinked or copied packages. ...

包缓存究竟在哪里?是…里面的包裹吗。。。\Anaconda\Lib\站点包?

这是否意味着在我试图打包的环境中找到了包(例如…\Anaconda\envs\myenv\Lib\site包(,但这些包不在包缓存中?

我应该如何解决这个问题?

Conda包缓存

Conda对所有软件包都有两步安装流程:

  1. 下载并解压到包缓存中默认情况下,这是Anaconda/pkgsminiconda3/pkgs,不与任何特定环境关联。可以使用pkgs_dirs配置设置指定自定义位置。包缓存用作所有环境可以共享包的位置。共享是通过…完成的
  2. 将包链接到环境位置pkgs_dirsenvs_dirs位于同一文件系统上时,Conda将使用硬链接将特定程序包链接到要安装的环境,从而最大限度地减少物理副本。当跨文件系统时,可以额外启用软链接(allow_softlinks配置设置(,以实现类似的最小复制,然而,由于软链接没有被跟踪(索引节点计数没有增加(,conda clean -p将无法识别软链接引用的存在,并且可能删除软链接环境所依赖的包

希望这能澄清包缓存及其用途。

可能的原因

现在来谈谈手头的问题。首先,它可能是所提到的,即环境的位置与包缓存的位置不同,并且在某个时刻运行了conda clean -p。但是,只有当您没有遵循默认的安装行为时,才会发生这种情况。

另一种可能是您一直在用pip安装东西。这导致从PyPI或GitHub将包安装到site-packages中,但它们不是Conda包,因此conda-pack不知道如何处理它。

建议的解决方法

无论哪种情况,我都会尝试导出到YAML、

conda env export > env.yaml

然后,如果有一部分pip:包,请尝试将它们全部替换为Conda版本(编辑YAML(。如果没有pip部分,那么它可能是conda clean -p部分。无论哪种方式,都可以使用YAML 重新创建您的环境

conda env create -f env.yaml -n new_env

这应该会强制重新下载缓存中丢失的包,并切换到非PyPI版本的包,假设您删除了所有pip:包。

我希望conda-pack能够处理这个重新构建的环境版本。

最新更新