jli*_*jli 5 python conda pip-tools
我尝试遵循安装完全固定依赖项的最佳实践(有关可重复构建和更好的 Docker 缓存,请参阅这篇 pythonspeed.com 文章)。
我的项目需要同时使用 conda 和 pip(conda 用于复杂的 ML 包,pip 用于 conda 上不可用的东西)。conda-lock和pip-compile工具能够在固定版本中生成所有传递依赖项。但是,这些工具是独立的:当我运行 pip-compile 时,它不知道 conda-lock 想要安装的依赖项,反之亦然。
这会导致不同的包版本,导致 Docker 映像中的空间浪费,并可能导致损坏/不兼容,因为该pip install步骤安装了某些传递依赖项的不同版本。
在使用conda 和 pip时,是否有人有更好的解决方案来创建固定的 Python 依赖项列表?
(编辑:这是关于 conda-lock 的 github 票证,用于支持 pip 依赖项:https://github.com/conda-incubator/conda-lock/issues/4)
您可以只安装所有依赖项,然后使用它conda env export来生成固定/版本化的environment.yaml.
主要缺点:这是较重的,因为它实际上必须安装所有依赖项。从好的方面来说,您最终只会得到一个环境“spec”环境文件作为输入,以及一个环境“lock”文件作为输出。
一起指定 conda 和 pip 依赖项。例子:
name: base
channels:
- conda-forge
- defaults
# etc.
dependencies:
- matplotlib
- pandas
- pip # needed to have a pip section below
- scikit-learn
- pip:
- pyplot_themes # only available on PyPI
Run Code Online (Sandbox Code Playgroud)
这可以直接在本地计算机上完成,但以下是如何在 Docker 中隔离此进程:
# syntax=docker/dockerfile:1
# Note: using miniconda instead of micromamba because micromamba lacks the
# `conda env export` command.
FROM continuumio/miniconda3:4.9.2
COPY environment-spec.yml /environment-spec.yml
# mounts are for conda caching and pip caching
RUN --mount=type=cache,target=/opt/conda/pkgs --mount=type=cache,target=/root/.cache \
conda env create -n regen_env --file /environment-spec.yml
# Export dependencies.
RUN conda env export -n regen_env > /environment-lock-raw.yml
CMD ["cat", "/environment-lock.yml"]
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样创建一个固定的环境文件(假设上面的 dockerfile 被命名为regen_environment.Dockerfile):
# syntax=docker/dockerfile:1
# Note: using miniconda instead of micromamba because micromamba lacks the
# `conda env export` command.
FROM continuumio/miniconda3:4.9.2
COPY environment-spec.yml /environment-spec.yml
# mounts are for conda caching and pip caching
RUN --mount=type=cache,target=/opt/conda/pkgs --mount=type=cache,target=/root/.cache \
conda env create -n regen_env --file /environment-spec.yml
# Export dependencies.
RUN conda env export -n regen_env > /environment-lock-raw.yml
CMD ["cat", "/environment-lock.yml"]
Run Code Online (Sandbox Code Playgroud)
这会将固定的环境文件输出到environment-lock.yaml,然后您可以使用 进行安装conda install -f environment-lock.yaml。
(这里有更多参考资料和详细信息的要点:https://gist.github.com/jli/b2d2d62ad44b7fcb5101502c08dca1ae)
| 归档时间: |
|
| 查看次数: |
2945 次 |
| 最近记录: |