OPAM: как локально переустановить пакет без его повторной загрузки?

Я хочу локально перекомпилировать/переустановить пакет, который уже был загружен через OPAM, но без повторной загрузки.

opam reinstall, похоже, всегда повторно загружает пакет, и я не вижу возможности его отключить.

Вот несколько причин, по которым может потребоваться выполнить эту локальную переустановку:

  • Локальные исходники были изменены, и человек хочет применить изменения без необходимости вручную пересобирать все из исходного исходного кода;
  • В настоящее время подключение к Интернету отсутствует или работает медленно/ограничено.

person anol    schedule 05.05.2015    source источник
comment
На странице руководства упоминается переменная среды OPAMCURL — предположительно, вы можете использовать ее для определения замены curl, используемой для загрузки пакетов. Вы рассматривали возможность использования этого? (установив его на фиктивный скрипт, который просто извлекает локальные источники, а не загружает их)   -  person Frank Schmitt    schedule 05.05.2015


Ответы (1)


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

Если вы хотите изменить исходный код локально, вам нужно pin установить пакет. Другой вариант — создать свой собственный репозиторий и добавить его в свой opam. Ваш локальный репозиторий может содержать все интересующие вас пакеты или только несколько. Для работы с локальными репозиториями есть инструмент opam-admin.

Создание собственного репозитория — не очень простая задача, поэтому я бы посоветовал вам использовать команду pin и закрепить пакеты, которые вы хотите иметь локально, по указанному локальному пути.

Пример (требуется opam 1.2 или выше)

 opam source lwt.2.4.8
 opam pin add lwt lwt.2.4.8

lwt был выбран произвольно, просто потому, что он короткий. Первая команда скачает исходники указанной версии и поместит их в папку lwt.2.4.8 вместе с файлом opam. Второй заставит инструмент opam использовать эту конкретную папку в качестве источника для пакета lwt.

person ivg    schedule 05.05.2015
comment
Но скажем, вы вносите изменения в закрепленный пакет, как заставить opam перекомпилировать его, помимо утомительного открепления и повторного закрепления? - person Edgar Aroutiounian; 05.05.2015
comment
Это просто, opam update lwt; opam upgrade lwt (на самом деле предыдущая команда может быть даже опущена в некоторых случаях, но проще просто вводить ее каждый раз) - person ivg; 05.05.2015
comment
Понятно, я думал, что это сработает, только если действительно изменится номер версии, а не исходный код. Спасибо! - person Edgar Aroutiounian; 05.05.2015