python - 无法在 docker 中重新创建 Conda 环境
问题描述
我从全新安装的 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 文件也是空的。
有谁知道如何解决这一问题?
解决方案
我遇到了类似的问题,我找到了多种解决方法。您的方法的主要问题是 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 要求文件中,如this answer
conda install pip
pip freeze > requirements.txt
然后转到您的 Docker 文件并添加以下行:
RUN python -m pip install -r requirements.txt
推荐阅读
- android - 如何在滚动视图布局下添加视图分页器和回收器视图
- asynchronous - Dart For Loop 在异步功能完成之前退出
- azure - 如何通过 rest api 触发 Azure Datafactory-v2?
- android - 在 Android Studio 中使用 PDF 矢量图形
- typescript - 使用 react spfx 在 webpart 中创建一个页面上下文不与 pnp 一起使用的新网站
- reactjs - 在 create-react-app 项目中将 svg 作为 ReactComponent 导入时未定义
- react-native - 在 App.delegate.m 中找不到 Firebase.h 文件
- php - 从数据库中检索数据到选择和复选框字段以在 Laravel 中进行编辑
- scala - 将类或函数编译成 Javascript
- openshift - 在openshift中加载geomesa accumulo的docker容器