Управление conda env в кроссплатформенной среде - PullRequest
0 голосов
/ 19 сентября 2019

Мой проект должен работать в кроссплатформенной среде (Mac, Win, Linux).Я создал conda env, который управляет нашими зависимостями для легкой установки.Я хочу убедиться, что все, кто хочет обновить enn, могут это сделать, однако, когда я пытаюсь экспортировать env из linux в файл yml, он не может быть правильно установлен на Win или Mac и наоборот.

IЯ уже пытался сделать обычные вещи:

1.conda env export> env.yml
conda env create --name -f env.yml

2.conda env export --no-builds> env.yml

3.https://medium.com/@Amet13/building-a-cross-platform-python-installer-using-conda-constructor-f91b70d393

4.https://tech.zegami.com/conda-constructor-tutorial-make-your-python-code-easy-to-install-cross-platform-f0c1f3096ae4

5.https://github.com/ESSS/conda-devenv/blob/master/README.rst

Ни один из вышеперечисленных дает мне правильный ответ ... некоторые из прилагаемых мной руководств могут помочь, но мне не удалось их правильно реализовать, и они не содержали некоторыеважная информация для правильного завершения учебника.

например: Относительно 3/4 - Он не объяснил, как создать файл yml, который должен создавать env.

Я понял, что conda должна работать в кроссплатформенной среде ..Было бы здорово, если бы кто-то мог помочь мне с этим.

1 Ответ

1 голос
/ 19 сентября 2019

Конвы Enda не являются кроссплатформенными по своей природе

Извините, но то, что вы просите, просто не вещь.Conda может сериализовать информацию о пакете среды в YAML (отлично подходит для воспроизводимости), но не может гарантировать, что она будет кроссплатформенной.На самом деле, многие пакеты, особенно те, которые не имеют кода Python, требуют различных базовых инструментов сборки в качестве зависимостей, поэтому то, что вы запрашиваете, никогда не будет удовлетворено.

Только явные спецификации

самое близкое, что вы можете получить в эти дни, это ограничить вашу environment.yaml только включением явных спецификаций, которые были включены в создание вашей среды с использованием флага --from-history.Эта функция была только что выпущена, поэтому вам нужна Conda 4.7.12 или более поздняя версия.

conda env export --from-history > environment.yaml

Это создаст YAML, который включает только пакеты, которые были явно запрошены в истории env,Например, если ваша история уходит ...

conda create -n foo python=3.7 numpy
conda install -n foo pandas scikit-learn

Тогда результат conda env export -n foo --from-history будет примерно таким:

name: foo
channels:
  - defaults
dependencies:
  - python=3.7
  - numpy
  - pandas
  - scikit-learn
prefix: /your/conda/dir/envs/foo

Таким образом, вы можете опустить все другие зависимости, которыеможет оказаться зависящим от платформы.


Я все еще вижу тонну пакетов?!

Я заметил, что если вы когда-нибудь используете флаг --update-deps вenv, он добавляет каждую зависимость к явной спецификации.Это довольно неудачно.Если это так, я бы предложил воссоздать env с использованием ваших законных спецификаций и избегать этого флага в будущем.Поиск по вашей истории команд может быть полезен при составлении этого допустимого списка спецификаций.

...