Я изучаю Conda environment.yml и я не уверен, как заставить Conda найти определенную версию dependancy

#python #django #conda #wagtail

#python #django #conda #трясогузка

Вопрос:

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

Пока мой yml выглядит так:

 name: wt
channels:
  - anaconda
  - conda-forge
  - defaults
dependencies:
  - python=3.7.*
  - django=3.1.1
  - wagtail=2.11
 

Итак, судя по ссылке на совместимость, у меня есть правильные версии для запуска Wagtail, но когда я вызываю goto conda env create -f environment.yml , я получаю:

 ResolvePackageNotFound:
  - wagtail=2.11
 

Итак, я просмотрел репозиторий Conda и не вижу версии 2.11. Как я могу получить версию 2.11, когда могу получить только с v1 или v 2.7, которые оба несовместимы?

Я проверил Wagtail Github, и они находятся на версии 2.7, но в версии 2.1 есть LTS, и именно поэтому я хотел бы его использовать.

Комментарии:

1. Разве вам не нужен оператор сравнения ( == ) при указании версии пакета, а не присваивания ( = ), как у вас есть?

2. @pavel В Pip вам нужен double == но, исходя из документации, вам нужен только один = docs.conda.io/projects/conda/en/latest/user-guide/tasks /…

3. Достаточно справедливо. Я не использовал файлы yml для настройки среды. Если по какой-то причине yaml не работает, почему бы вам не исключить wagtail из вашего файла среды, а затем попытаться установить версию 2.1 в среду, используя conda или pip?

4. Потому что я думаю, что я только что исправил это!

5. О, тогда поздравляю!

Ответ №1:

Хорошо, документация для создания conda env немного неоднозначна, поэтому я сделаю clone amp; push позже, чтобы исправить это. Итак, ниже приведен пример файла того, что, как я обнаружил, вы можете сделать с помощью environment.yml.

 name: environment-name
channels:
  - anaconda
  - conda-forge
  - defaults
dependencies:
  - python=3.7.*
  - django=3.1.1
  - pip
  - pip:
    - wagtail==2.11.*
 

Имя:

Ссылочное имя среды.

Каналы:

Это репозитории в CondaCloud, которые Conda ищет при установке, пример здесь . Пожалуйста, обратите внимание, что «канал» означает имя пользователя владельца пакета.

зависимости:

Пакет, который вы хотите установить, может содержать или не содержать номера версий. если вы хотите объявить номер версии после второго / третьего / четвертого десятичного знака, но не десятичного знака X, вы можете использовать подстановочный знак ‘*’ для указания любого. Вы также можете включить Pip, но сначала убедитесь, что вы включили его как Conda dependancy . Также стоит упомянуть, что Conda использует один ‘=’, а Pip использует два ‘==’ при указании номера версии.

Комментарии:

1. Несколько советов: anaconda канал — это подмножество defaults , поэтому вам не нужны оба. Как правило, если вам это понадобится conda-forge , приоритет должен быть отдан defaults / anaconda . Вам не нужен .* Python 3.7 спецификации to; просто python=3.7 он более идиоматичен. Не уверен, почему вы включаете версию исправления в django спецификацию. Это понадобится только в том случае, если вы планируете использовать conda (install|update) команды позже и хотите сохранить эту конкретную версию заблокированной. Как правило, если начинать с YAML, то последующие изменения в env должны быть опосредованы редактированием YAML, а затем воссозданием.