Невозможно воссоздать среду Conda в докере

Я создал среду conda из новой установки miniconda3.

После этого я экспортировал его, и вот содержимое файла (моей единственной дополнительной установкой была фляга):

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 пуст.

Кто-нибудь знает, как это исправить?

возможно это может помочь, поскольку я уже сталкивался с подобной проблемой в прошлом. Вы можете удалить версию сборки и версию версии, хотя некоторые приложения могут работать по-другому, если установлена ​​другая версия.

d_kennetz 17.12.2018 18:14

Это одна и та же ОС для создания файла environment.yml и образа Docker?

darthbith 19.12.2018 16:34

некоторые из этих библиотек зависят от платформы, например: libcxxabi и libcxx, они предназначены для OSX, но в Linux они недоступны. Некоторые из этих библиотек работают, только если я помещаю их в раздел PIP. Я хотел бы сделать environment.yml кроссплатформенным, но я не знаю, как ...

gotch4 20.12.2018 17:14

@ gotch4 Я не думаю, что файлы среды conda с кросс-платформенной совместимостью существуют в настоящее время, и это потому, что сама conda не является полностью кроссплатформенной. Поправьте меня, если я ошибаюсь, интернет.

Michael 25.06.2019 14:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
4
1 147
1

Ответы 1

У меня была похожая проблема, и я нашел несколько способов ее решить. Основная проблема с вашим подходом заключается в том, что conda не зависит от платформы, поэтому заставляет среды использовать pip.

1. Решение типа Conda

Измените свой my_env.yml так, чтобы все зависимости, кроме 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. Старый добрый Путь Пипа

Экспортируйте среду conda в файл требований pip как на этот ответ

conda install pip
pip freeze > requirements.txt

Затем перейдите в свой файл Docker и добавьте следующую строку:

RUN python -m pip install -r requirements.txt

Другие вопросы по теме