Подтвердить что ты не робот

Haskell cabal: я только что установил пакеты, но теперь пакеты не найдены

Здесь - единственная причина, по которой я могу найти, что пакеты, которые я устанавливаю с помощью cabal, не найдены GHC:

Это происходит, когда вы устанавливаете пакет по всему миру, а предыдущие пакеты устанавливались локально. Обратите внимание, что установка cabal-install устанавливается локально по умолчанию [...]

Предположительно, "локальная установка" означает размещение пакетов в ~/.cabal/. Первый вопрос: где глобальные установки?

Я выполнял cabal с помощью sudo, поэтому я предполагаю, что глобальная установка? Причина, по которой я делаю это, заключается в том, что он жалуется на разрешения при запуске без sudo, так что это противоречит утверждению "по умолчанию установка" по умолчанию ". Второй вопрос: как установить локально и как мне установить глобально?

Попытка исправить этот беспорядок, я случайно использовал sudo ghc-pkg unregister и случайным образом удалял файлы из ~/.cabal/. Следовательно, дерево пакетов разбито, возможно, локально и глобально. Третий вопрос: Как начать заново?


Изменить: я запускаю Ubuntu 10.10. Я установил платформу Haskell 2011.

4b9b3361

Ответ 1

Используете ли вы Windows, OS X или некоторую версию Linux? Вы используете платформу Haskell? У вас была версия ghc или cabal раньше? Разумеется, для дистрибутива Linux могут возникнуть тонкости вашего менеджера пакетов. (Трассировки старого ghc в частности, и старый каталог ~/.ghc/может быть источником проблем.)

Вот несколько элементарных мыслей о том, что один тип проходит через #haskell с такими проблемами. (Разумеется, мое понимание не вполне адекватно):

Главный вопрос, похоже, заключается в том, почему вас приглашали делать то, что должно быть локально установлено с помощью sudo? Разумеется, для глобальной установки (cabal install pony --global) необходимы привилегии, если ghc и ее библиотеки находятся в /usr/... или в другом защищенном месте, но в противном случае sudo vs non sudo не зависит от места установки. То, что вы делаете с cabal install pony --user (--user по умолчанию, по умолчанию), не должно требовать полномочий суперпользователя. (Я иногда обнаружил в OS X, что запрашиваются привилегии, где нужно вызвать gcc, но это обычно связано с любопытством относительно моей установки.) Но в любом случае sudo не влияет на то, где cabal помещает их: неявный --user и явный --global, и более конкретные заклинания для развития, сделайте это.

Если вы делаете ghc-pkg list, например, он будет делить пакеты на разные места, в которые они зарегистрированы, в соответствии с двумя или более каталогами package.conf.d, которые он суммирует. На моем ноутбуке на данный момент это

/Users/applicative/.ghc/x86_64-darwin-7.0.3/package.conf.d/... 

для локальных вещей в ~/.cabal/lib/... и защищенных

/Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/package.conf.d 

для вещей, которые были установлены глобально с помощью установщика платформы Haskell (это место связано с некоторыми особенностями OS X, ghc, ghci и т.д. находятся где-то в лесу, но символически привязаны к /usr/bin). Файлы conf для разных пакетов сообщают вам, где именно были установлены библиотеки. Так, например, о священной библиотеке base,

$ cat base-4.3.1.0-f5c465200a37a65ca26c5c6c600f6c76.conf

говорит мне:

import-dirs:
 /Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/base-4.3.1.0
library-dirs: 
 /Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/base-4.3.1.0

В любом случае, где ghc-pkg list говорят, что ваши пакеты cabal install -ed идут? В папке ~/.cabal просмотрите файл config. Если вы его не отредактировали, я думаю, что строки с комментариями и без комментариев, если они указывают предпочтение, указывают значения по умолчанию для установки с помощью --global и --user. В директории ~.ghc/ проверьте подкаталог myghcversion/package.conf.d и посмотрите, есть ли что-нибудь, что должно быть таким же, как указано ghc-pkg. (Вы можете изучить варианты ghc-pkg в общем случае, например, ghc-pkg check и ghc-pkg recache, если вы этого не сделали. Возможно, вы установили что-то нечетным образом.)

Если вы установили ghc и cabal и co. устанавливая платформу Haskell с помощью двоичного установщика или менеджера пакетов, что кажется хорошей идеей, также я считаю хорошей идеей сохранить библиотеки платформы как нечто священное и убедиться, что вы никогда не устанавливаете ничего глобально из Hackage; среди прочего, это, вероятно, приведет к перезаписи библиотек платформ, хотя здесь это не кажется сложной: было бы более очевидно, если бы это было.