2015-08-18 7 views
4

Я смущен тем, как работает Кабал. Я привык к менеджерам пакетов, которые в рамках своей основной функции могут легко обновлять все измененные пакеты или, по крайней мере, получать список пакетов в моей системе, которые имеют доступные обновления. Но Cabal, похоже, не обладает этой функциональностью. Я что-то упускаю?Есть ли способ использовать Cabal для обновления пакетов Haskell?

Есть ли способ:

  1. Автоматически или легко обновить все пакеты устарелых; или, в противном случае,
  2. Получите список пакетов, установленных в моей системе с имеющимися обновлениями?
+0

Почти все 'cabal' пакеты не зависят от новейшей версии пакета зависимостей, а конкретная версия этой зависимости. 'Cabal' разрешает зависимости, загружая версию * требуемого * пакета, а не версию * новейшего * пакета. –

+0

@ recursion.ninja: Есть ли способ сделать (2) - подождите, куда идут мои номера ?! То есть получить список пакетов, имеющих обновления по сравнению с текущими в моей системе? – orome

+0

@ recursion.ninja: И я не уверен, что понимаю модель. Скажем, например, версия X (которая зависит от a, b и c, которые не изменились, а на p, q и r, которые есть), я старше, чем текущая версия, и я бы хотел для его обновления. Как мне перейти на обновление X? (Используя pip для Python, например, я просто обновлял X, p, q и r - или более лаконично, обновлял X, который обновлял p, q и r - и я был бы сделан, не беспокойтесь.) – orome

ответ

8

Существует ряд стандартных функций управления пакетами, отсутствующих в кабине. Это один из них, и (переходное) удаление пакетов - другое. Линия партии - это то, что кабала предназначена для автоматического создания инструмента, ничего более; хотя эта линия становится тоньше и тоньше, поскольку годы тянутся.

Если вы знаете, какие пакеты вы хотите обновить, вы можете; обычно cabal update и cabal install those packages будут захватывать новейший пакет пакетов из Hackage и попытаться найти план установки, который устанавливает новейшие версии запрошенных пакетов. Вы можете запросить план установки без его выполнения с помощью cabal install --dry-run those packages; если это не выглядит, как он выбрал варианты, которые вы хотите, вы можете добавить ограничения, как и в

cabal install those packages --constraint 'those>=9000' 
+0

[это обходное решение] (http://stackoverflow.com/a/6905267/656912) периодически имеет смысл? – orome

+1

@raxacoricofallapatorius Я бы посоветовал не запускать его автоматически. Просто запустите его, когда вы обнаружите, что вам нужна * новая версия пакета, а пакет «cabal installName-1.2.3.4» не может разрешать зависимости из-за уже установленных пакетов. Ожидайте хотя бы час перекомпиляции многих пакетов ... –

+0

@raxacoricofallapatorius Это похоже на потрясающий способ инициировать то, что в разговоре называется «адский ад». (По крайней мере, вы должны сказать cabal о * all * пакетах, которые вы хотите переустановить в одной команде, вместо того, чтобы запускать одну команду для каждого пакета.) С другой стороны, выясняя, как вы выходите из адского адского места, несколько раз научит вас многому о том, как работает каббала ... –

Смежные вопросы