Установка переносимого пакета на платформе Haskell с помощью Cabal в Windows

У меня установлена ​​Windows XP и Haskell Platform 2013. Когда я хочу скомпилировать свой код на каком-то компьютере, на котором не установлена ​​платформа Haskell, и мне не разрешено ничего устанавливать, я могу скопировать свою платформу Haskell на USB-флеш-карту и запустить на этом компьютере, и это работает просто отлично.

Но иногда мне нужны дополнительные пакеты, не входящие в стандартную сборку платформы Haskell.

Я могу просто установить его на свой персональный компьютер с Cabal, но я не знаю, как их установить так, чтобы они могли работать портативно, т.е. е. с моей флешки на не моем компьютере.

Я пробовал это:

cabal install gnuplot --prefix "C:\Program Files\Haskell Platform\2013.2.0.0"

Этот установленный пакет в каталог платформы Haskell, но когда я запускаю платформу Haskell на другом компьютере, он его не видит.

Я думаю, что я должен сделать файл конфигурации для установки в каталог платформы Haskell, но я не знаю, как это сделать.

Пожалуйста, помогите мне решить эту проблему. Заранее спасибо!



Большое спасибо, Михаил Глушенков! Теперь все работает.

Для удобства таких же новичков, как я, ищущих ответы, я просто описываю инструкцию, что делать, чтобы получить такой же результат:

0) Прочтите инструкцию, прежде чем что-либо делать/

1) Удалите все дополнительные пакеты, необходимые для переносной установки (с зависимостями): отмените регистрацию этих пакетов с помощью

ghc-pkg unregister gnuplot

, а затем удалите файлы пакетов из того места, где он хранится. Также удалите все связанные файлы из папки "package.conf.d". Для их поиска используйте

ghc-pkg list

.

2) Запустить (может и не нужно)

ghc-pkg recache

.

3) Установите пакет в нужный каталог на платформе Haskell. Я сделал это в "C:\Program Files\Haskell Platform\2013.2.0.0\addlib":

cabal install gnuplot --prefix "C:\Program Files\Haskell Platform\2013.2.0.0\addlib" --global

.

4) Измените каждый новый файл, связанный с установленными пакетами, в "package.conf.d": замените "C:\Program Files\Haskell Platform\2013.2.0.0\addlib\utility-ht-0.0.9\ghc-7.6.3". " в них так: "$topdir\..\addlib\utility-ht-0.0.9\ghc-7.6.3", т.е. е. "C:\Program Files\Haskell Platform\2013.2.0.0\addlib\" -> "$topdir\..\addlib\".

5) Беги

ghc-pkg recache

.

3a) Возможно, это сработает лучше, чем 3 (не проверял). Если да, то не делайте 3, 4 и 5.

cabal install gnuplot --prefix "$topdir\..\addlib" --global

.

Конец.

*UPD*

Я нашел несколько глупых ошибок в этой инструкции (в 3а и 4). Исправлено сейчас.

3а не работает!


person Anon Imous    schedule 25.09.2013    source источник
comment
Я никогда не устанавливал Haskell на Windows, так что, может быть, я просто чего-то не понимаю, но я не понимаю префикса. Префикс, который вы предоставляете, отсутствует на вашем USB-накопителе, почему тогда вы ожидаете увидеть его на другом компьютере?   -  person asm    schedule 25.09.2013
comment
@AndrewMyers, я установил библиотеку в папку платформы Haskell и переместил папку платформы Haskell на свою USB-флеш-карту, поэтому физически библиотека находилась на другом компьютере. Проблема заключалась в том, чтобы платформа Haskell увидела его на другом компьютере. А я не знал, как это сделать, поэтому и задал вопрос.   -  person Anon Imous    schedule 26.09.2013


Ответы (1)


Вам нужно заменить абсолютные пути в $GHCDIR\lib\package.conf.d\*.conf файлах относительными путями, ссылающимися на $topdir, а затем запустить ghc-pkg recache.

Посмотрите, как это делает установщик Haskell Platform для Windows. .

person Mikhail Glushenkov    schedule 25.09.2013
comment
Спасибо, @MikhailGlushenkov, но, похоже, у меня нет ни одного файла, относящегося к библиотеке gnuplot (которую я, в частности, установил). Как я мог сделать этот файл? - person Anon Imous; 25.09.2013
comment
Ну, я пока не могу отредактировать предыдущий комментарий, поэтому просто пишу: я имею в виду, что у меня нет такого файла в указанной вами директории. - person Anon Imous; 25.09.2013
comment
@AnonImous Беги ghc-pkg list. Он покажет вам расположение package.conf.d каталогов. Кроме того, вам нужно запустить cabal install с --global, чтобы он установился в глобальную базу данных пакетов. - person Mikhail Glushenkov; 25.09.2013
comment
Извините, что прерываю вас, но как сразу установить его портативным? - person Anon Imous; 05.03.2014
comment
Похоже, ТАК не звал тебя сюда. Так что я делаю это сейчас. @Михаил - person Anon Imous; 06.03.2014
comment
@AnonImous Я не думаю, что cabal-install поддерживает это из коробки. Вам нужно создать собственный скрипт. - person Mikhail Glushenkov; 06.03.2014
comment
Спасибо, @Mikhail, за информацию! Теперь думаю, что я это сделаю. - person Anon Imous; 07.03.2014
comment
Ссылка мертва. - person SwiftsNamesake; 15.02.2017