背景
我有一个用于JupyterLab图像的多级Dockerfile。有三个阶段:
serverkernel:mamba create -y -n /tmp/kernel-packages/myenv ...runnerFROM ... as runner
...
COPY --from=kernel /tmp/kernel-packages/ /opt/conda/envs
RUN conda config --append envs_dirs /opt/conda/envs/
...问题
在生成的映像中,首选 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作为它的支撑点。
期望的
一种类似于pip install --root /tmp/server-packages ...的行为,它在COPY --from=server /tmp/server-packages /中非常好地工作。
更多信息
此外,一些其他二进制文件,如curl或papermill,也有由conda硬编码的错误路径。我读过关于Anaconda ?移动Conda环境的文章,但是使用conda-pack和conda-unpack似乎太过分了。
解决办法
只需按名称创建一个env:mamba create -y -n myenv,然后在runner阶段创建COPY --from=kernel /opt/conda/envs /opt/conda/envs。
问题
有一个Conda (Mamba)等价于pip install**'s** --root 选项吗?--我并不是在寻找所述问题的解决方案,因为我已经找到了一种适合我自己的方法。我感兴趣的纯粹是conda二进制的功能。
发布于 2022-03-22 16:58:22
--prefix参数是等价的--只是一些Conda包使用硬编码路径,因此遇到了问题。
conda-prefix-replacement
要通过复制操作正确地将Conda环境移动到新前缀,需要运行conda-prefix-replacement工具(a.k.a.,cpr),以确保所有具有硬编码路径的文件都被更新到新位置。想必,conda-pack也在做一件类似的事情,只是一时半途而废.
出于您的目的,您可以考虑在内核映像中的环境上预先运行cpr,以便它们可以在部署的位置工作。尽管这意味着总是COPYing到相同的位置。
有关使用的详细信息,请参阅存储库。
https://stackoverflow.com/questions/71570442
复制相似问题