【问题标题】:Can't recreate Conda environment in docker无法在 docker 中重新创建 Conda 环境
【发布时间】:2018-12-17 17:07:44
【问题描述】:

我从全新安装的 miniconda3 创建了一个 conda 环境。

之后我将其导出,这是文件的内容(我唯一的额外安装是烧瓶):

name: myenv
channels:
  - defaults
dependencies:
  - ca-certificates=2018.03.07=0
  - certifi=2018.11.29=py37_0
  - click=7.0=py37_0
  - flask=1.0.2=py37_1
  - itsdangerous=1.1.0=py37_0
  - jinja2=2.10=py37_0
  - libcxx=4.0.1=hcfea43d_1
  - libcxxabi=4.0.1=hcfea43d_1
  - libedit=3.1.20170329=hb402a30_2
  - libffi=3.2.1=h475c297_4
  - markupsafe=1.1.0=py37h1de35cc_0
  - ncurses=6.1=h0a44026_1
  - openssl=1.1.1a=h1de35cc_0
  - pip=18.1=py37_0
  - python=3.7.1=haf84260_7
  - readline=7.0=h1de35cc_5
  - setuptools=40.6.2=py37_0
  - sqlite=3.26.0=ha441bb4_0
  - tk=8.6.8=ha441bb4_0
  - werkzeug=0.14.1=py37_0
  - wheel=0.32.3=py37_0
  - xz=5.2.4=h1de35cc_4
  - zlib=1.2.11=h1de35cc_3
prefix: /Users/rossid/miniconda3/envs/phadmin

现在我想要的是在一个文档图像中重新创建这个环境,所以我创建了这个 Dockefile

FROM continuumio/miniconda3
ADD * myappdir/
RUN conda env create -f /myappdir/environment.yml

但它会失败:

Step 1/5 : FROM continuumio/miniconda3
 ---> d3c252f8727b
Step 2/5 : ADD * myappdir/
 ---> Using cache
 ---> 2afbf5ea75bd
Step 3/5 : RUN conda env create -f /myappdir/environment.yml
 ---> Running in 7f916bd46979
Solving environment: ...working... failed

ResolvePackageNotFound: 
  - tk==8.6.8=ha441bb4_0
  - ncurses==6.1=h0a44026_1
  - markupsafe==1.1.0=py37h1de35cc_0
  - readline==7.0=h1de35cc_5
  - zlib==1.2.11=h1de35cc_3
  - openssl==1.1.1a=h1de35cc_0
  - xz==5.2.4=h1de35cc_4
  - libcxxabi==4.0.1=hcfea43d_1
  - libcxx==4.0.1=hcfea43d_1
  - libffi==3.2.1=h475c297_4
  - sqlite==3.26.0=ha441bb4_0
  - python==3.7.1=haf84260_7
  - libedit==3.1.20170329=hb402a30_2

为什么会这样?如果我尝试做同样的事情来创建另一个环境,它会起作用。如果我删除构建版本,则解决了一些依赖项(我的意思是依赖项中的第三个坐标)。

我尝试添加更多频道,例如 conda-forge,但没有。

我的 .condarc 文件也是空的。

有谁知道如何解决这个问题?

【问题讨论】:

  • 也许是this may help,因为我过去也遇到过类似的问题。您可以删除构建版本和版本版本,但如果安装了不同的版本,某些应用的工作方式可能会有所不同
  • 生成 environment.yml 和 Docker 镜像是同一个操作系统吗?
  • 其中一些库依赖于平台,例如:libcxxabi 和 libcxx,它们适用于 OSX,但在 Linux 中不可用。其中一些库只有在我将它们放在 PIP 部分时才有效。我想做一个跨平台的 environment.yml 但我不知道如何......
  • @gotch4 我认为目前不存在跨平台兼容的 conda 环境文件,这是因为 conda 本身并不完全跨平台兼容。如果我错了,请纠正我,互联网。

标签: python python-3.x docker dockerfile miniconda


【解决方案1】:

我遇到了类似的问题,我找到了多种解决方法。您的方法的主要问题是 conda 不是独立于平台的,因此会强制环境使用 pip。

1. Conda Like 解决方案

更改您的 my_env.yml 以便除 pip 之外的所有依赖项都在 pip 依赖项下。请注意,当您在 pip 下移动时,语法会有所不同。

例如:

name: myenv
channels:
  - defaults
dependencies:
   - pip=18.1
   - pip:
     - wheel==0.32.3

然后转到您的 Dockerfile 并添加以下行:

RUN conda env update -n base --file myenv.yml

2。好旧的 Pip 方式

将您的 conda 环境导出到 pip 要求文件中,为 at this answer

conda install pip
pip freeze > requirements.txt

然后转到您的 Docker 文件并添加以下行:

RUN python -m pip install -r requirements.txt

【讨论】:

  • 天哪,为什么包管理在 python 中如此糟糕?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 2020-01-20
相关资源
最近更新 更多