Haskell cabal: я только что установил пакеты, но теперь пакеты не найдены - PullRequest
20 голосов
/ 02 июня 2011

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

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

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

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

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


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

1 Ответ

8 голосов
/ 02 июня 2011

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

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

Главный вопрос, по-видимому, заключается в следующем: почему вас приглашают сделать то, что должно быть локальной установкой с sudo?Глобальная установка (cabal install pony --global), конечно, потребовала бы привилегий, если ghc и его библиотеки находятся в /usr/... или другом защищенном месте, но в противном случае sudo против не-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 Platform (этоМестоположение включает в себя некоторые особенности 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 и со.установив платформу Haskell с помощью бинарного установщика или вашего менеджера пакетов, что кажется хорошей идеей, я думаю, что было бы также хорошей идеей сохранить библиотеки платформы как нечто священное и убедиться, что вы никогда не устанавливаете что-либо глобально из Hackage;кроме всего прочего, это может привести к перезаписи библиотек Platform - хотя здесь это не кажется трудным: это было бы более очевидно, если бы это было.

...