尝试使用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对所有软件包都有两步安装流程:
-
下载并解压到包缓存中默认情况下,这是
Anaconda/pkgs
或miniconda3/pkgs
,不与任何特定环境关联。可以使用pkgs_dirs
配置设置指定自定义位置。包缓存用作所有环境可以共享包的位置。共享是通过…完成的 -
将包链接到环境位置当
pkgs_dirs
和envs_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
能够处理这个重新构建的环境版本。