Как обеспечить повторяемость кода Julia и связанных зависимостей?

Aug 19 2020

Скажем, у меня есть проект, в котором я выполняю анализ (т. Е. Не хочу разрабатывать совместно используемый пакет), но я хочу убедиться, что другие могут клонировать репозиторий и создать экземпляры зависимостей и запустить код, как написано.

Шаги, которые я сделал до сих пор:

  1. Созданный код в собственной папке
  2. Сделал эту папку средой Julia ( activate .в пакетном режиме REPL)
  3. addредактировал пакеты, которые я использую

Блокирует ли это версии зависимостей? Или мне нужно вручную добавлять [compat]записи в Project.tomlфайл? Если [compat]входные данные необходимы, есть ли способ автоматически включить эту запись addв пакет?

Есть ли общий подход к обеспечению воспроизводимости?

Ответы

5 KristofferCarlsson Aug 19 2020 at 18:42

Блокирует ли это версии зависимостей?

Если вы фиксируете свой, Project.tomlа Manifest.tomlзатем кто-то может клонировать репо, активируйте этот проект и import Pkg; Pkg.instantiate()загрузите те же версии, которые записаны в манифесте.

3 fredrikekre Aug 19 2020 at 18:42

Блокирует ли это версии зависимостей?

Да, в том смысле, что точные версии записываются в Manifest.tomlфайл, пока этот файл не изменяется, они заблокированы.

Или мне нужно вручную добавлять [compat]записи в Project.tomlфайл?

Тебе не нужно этого делать. Это имеет значение только тогда, когда кто-то выполняет операцию пакета, которая вызывает преобразователь, например pkg> add ...или pkg> up. Если ваш код основан на какой-то конкретной версии пакета, вы всегда можете добавить это в [compat]раздел. Например, если вы полагаетесь на функцию, для которой требуется Xверсия пакета 1.3.0, вы можете добавить

[compat]
X = "1.3"

Это гарантирует, что даже если кто-то вызовет распознаватель пакетов, вы получите как минимум версию 1.3 пакета X.