是否有等同于 pip install 的 `--root` 路径选项的 conda (mamba)?

Is there a conda (mamba) equivalent to pip install's `--root` path option?

背景

我有一个用于 JupyterLab 图像的多阶段 Dockerfile。分为三个阶段:

FROM ... as runner
...

COPY --from=kernel /tmp/kernel-packages/ /opt/conda/envs
RUN conda config --append envs_dirs /opt/conda/envs/

...

问题

在生成的图像中,the preferred python -m pip 有效,但 pip 给出:

bash: /opt/conda/envs/myenv/bin/pip: /tmp/kernel-packages/myenv/bin/python3.9: bad interpreter: No such file or directory

原因是 pip#!/tmp/kernel-packages/myenv/bin/python3.9 作为它的 shebang。

预计

pip install --root /tmp/server-packages ... 这样的行为在 COPY --from=server /tmp/server-packages / 中工作得很好。

附加信息

此外,其他一些二进制文件,如 curlpapermill 也有错误的路径,由 conda 硬编码。我读过 Anaconda | Moving Conda Environments,但使用 conda-packconda-unpack.

似乎有点矫枉过正

解决方法

只需按名称创建一个环境:mamba create -y -n myenv 然后在 runner 阶段 COPY --from=kernel /opt/conda/envs /opt/conda/envs.

问题

是否有与 pip install--root 选项等效的 Conda (Mamba)? 我不是在寻找上述问题的解决方案就像我一样,我已经找到了一种适合我的方法。我的兴趣纯粹是 conda 二进制文件的功能。

--prefix 参数是等效的 - 只是一些 Conda 包使用硬编码路径,因此您遇到了这个问题。

conda-prefix-replacement

要通过 COPY 操作将 Conda 环境正确移动到新前缀,需要 运行 conda-prefix-replacement 工具(a.k.a., cpr)确保所有具有硬编码路径的文件都更新到新位置。据推测,conda-pack 也在做类似的事情,只是 under-the-hood.

出于您的目的,您可以考虑 pre-running cpr 内核映像中的环境,以便它们准备好在部署位置工作。尽管那意味着总是复制到同一位置。

有关使用的详细信息,请参阅 the cpr repository