2015-02-19 1 views
1

Когда у меня есть песочница, кажется cabal install игнорирует пакеты в $HOME/.ghc/x86_64-linux-7.8.4/package.conf.d.Как сделать песочницу из кэбала осведомленной о (установленных) пакетах в других местах?

Как настроить песочницу таким образом, чтобы эти пакеты стали видимыми? Я вижу расплывчатую ссылку на --package-db=db в https://www.haskell.org/cabal/users-guide/installing-packages.html#sandboxes-advanced-usage , но я не понимаю ни того, ни того, как ее использовать. (с песочницей init? configure? install? none, похоже, не работает - никто не дает никаких сообщений об ошибке.)

Я знаю о add-source, но мой вопрос относится к установленным пакетам.

ответ

1

Весь смысл песочницы заключается в том, что она игнорирует вашу локальную базу данных пакетов.

Если вы хотите поделиться инсталляциями во многих песочницах, вы можете установить их в глобальную базу данных; но тогда вы должны быть очень осторожны, так как исправление плохой сломанной упаковки намного сложнее. Храните его в действительно основных пакетах, которые, как вы ожидаете, будут широко распространены во многих проектах, а не только на полдюжины, которые вы сейчас подчеркиваете для своей работы.

В качестве альтернативы вы можете совместно использовать одну песочницу между сборками многих пакетов; просто установите переменную CABAL_SANDBOX_CONFIG в абсолютный путь, указывающий на соответствующий файл cabal.sandbox.config. Это значительно безопаснее и гораздо более гибко, так как вы можете выбрать, как широко распространены ваши установленные пакеты (и в плохих случаях просто наносите песочницу и начните заново).

+1

«точка песочницы должна игнорировать» - я думал, что вы создаете локальную среду сборки, подобно блокам (на языках программирования), допускающим локальные объявления. Итак, точка - это локальность, но почему это должно запрещать вложенность (доступ к чему-либо из внешнего пространства)? Конечно, если «access» = «change», тогда он становится беспорядочным, и я действительно склонен к тому, чтобы теперь «добавить песочницу». - Кстати, не «полдюжины», больше как «две дюжины». – d8d0d65b3f7cf42

1

Здесь вы можете попробовать - скопируйте (или symlink) файлы из ~/.ghc/{arch-os-ghc-version} /package.conf.d в версию {arch-os-ghc-sandbox] } -packages.conf.d.

Существует вопрос о файле package.cache. Следующая процедура, кажется, безопасный способ продолжить:

  1. Начните с пустой песочницей
  2. Скопировать в package.conf.d файлы из ~/.ghc в песочницу (включая package.cache)
  3. Добавить пакеты в песочнице с помощью cabal install --only-dependencies

Я не знаю, если требуется файл package.cache или, если есть способ, чтобы восстановить его.

Одним из недостатков является то, что cabal install --only-deps, похоже, переустанавливает сломанные пакеты в песочнице, даже если они не требуются вашим приложением. Возможно, для этого есть обход.