Конвы 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 с использованием ваших законных спецификаций и избегать этого флага в будущем.Поиск по вашей истории команд может быть полезен при составлении этого допустимого списка спецификаций.