【问题标题】:How to work together with cabal-3 and ghc (ghc-pkg, too)?如何与 cabal-3 和 ghc(也是 ghc-pkg)一起工作?
【发布时间】:2020-08-30 05:42:37
【问题描述】:

随着 cabal-3 的发布,来自 Hackage 的软件包安装在编译器 ghcghc-pkg 不知道的新位置。 换句话说,软件包已安装但未注册ghcGhcighcghc-pkg 无法工作。

例如,

cabal install safe --lib

创建文件 t1.hs

import Safe

t1 = tailMay [1,2,3]

让我们试试吧:

> ghci t1.hs
GHCi, version 8.10.2: https://www.haskell.org/ghc/:? for help
[1 of 1] Compiling Main (t1.hs, interpreted)

t1.hs: 1: 1: error:
    Could not find module `Safe '
    Use -v (or `: set -v` in ghci) to see a list of the files searched for.
  |
1 | import Safe
  | ^^^^^^^^^^^
Failed, no modules loaded.

这里描述了这个错误

https://github.com/haskell/cabal/issues/6262

这里

https://gitlab.haskell.org/ghc/ghc/-/issues/17341

我使用设置系统变量作为临时解决方案

GHC_PACKAGE_PATH=C:\Users\me\AppData\Roaming\cabal\store\ghc-8.10.2\package.db;

(Windwos 10,巧克力的 haskell-dev)

通过 On Windows, packages installed with cabal seem to be unavailable in ghc/ghci

但随着更新,我将不得不手动更改此系统变量。

对于这个问题还有更优雅的解决方案吗?

附:不幸的是,这个解决方案(通过 GHC 的环境变量 GHC_PACKAGE_PATH)与 Cabal 不兼容:(

https://github.com/haskell/cabal/issues/1944

【问题讨论】:

    标签: haskell ghc cabal cabal-new ghc-pkg


    【解决方案1】:

    实现此目的的一种方法是使用--env 标志使库在您位于当前目录时可供GHC 使用:

    ~ $ mkdir /tmp/foo
    ~ $ cd /tmp/foo
    /tmp/foo $ cabal install safe --lib --env .
    Resolving dependencies...
    Build profile: -w ghc-8.8.3 -O1
    In order, the following will be built (use -v for more details):
     - safe-0.3.19 (lib) (requires build)
    Configuring library for safe-0.3.19..
    Preprocessing library for safe-0.3.19..
    Building library for safe-0.3.19..
    …
     > Installing library in /home/jojo/.cabal/store/ghc-8.8.3/incoming/new-4056/home/jojo/.cabal/store/ghc-8.8.3/safe-0.3.19-92fbaef88124b4508ce447f6245bc793f7a1748247ae68d10e449150df1069af/lib
    t1.hs
    /tmp/foo $ cat > t1.hs
    import Safe
    
    t1 = tailMay [1,2,3]
    /tmp/foo $ ls -a
    .  ..  .ghc.environment.x86_64-linux-8.8.3  t1.hs
    /tmp/foo $ ghci t1.hs
    GHCi, version 8.8.3: https://www.haskell.org/ghc/  :? for help
    Loaded package environment from /tmp/foo/.ghc.environment.x86_64-linux-8.8.3
    [1 of 1] Compiling Main             ( t1.hs, interpreted )
    Ok, one module loaded.
    *Main> 
    

    请注意,您可能不应该在您实际拥有 foo.cabal 文件的目录中执行此操作。详情请见the documentation of cabal v2-install

    【讨论】:

      【解决方案2】:

      使用GHC_ENVIRONMENT 更好:

        setx  GHC_ENVIRONMENT C:\Users\me\.ghc\x86_64-mingw32-8.10.2\environments\default
      

      它对ghcghci 有帮助。

      C:\Users\me\AppData\Roaming\cabal\config之后,我们应该添加

        package-db: C:\Users\me\AppData\Roaming\cabal\store\ghc-8.10.2\package.db
      

      它有助于cabal

      不幸的是,ghc-pkg 仍然有问题并且可以使用这样的标志:

        ghc-pkg list --user-package-db="C:\Users\me\AppData\Roaming\cabal\store\ghc-8.10.2\package.db"
      

      对于 Linux,步骤类似。

      【讨论】:

        猜你喜欢
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多