问题描述
随着cabal-3的发布,来自Hackage的软件包被安装在编译器ghc
和ghc-pkg
一无所知的新位置。
换句话说,软件包已安装但未为ghc
注册。 Ghci
,ghc
,ghc-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
但要进行更新,我将不得不手动更改此系统变量。
对于这个问题还有更好的解决方案吗?
P.S。不幸的是,该解决方案(通过GHC的环境变量GHC_PACKAGE_PATH)与Cabal:(
https://github.com/haskell/cabal/issues/1944
解决方法
实现此目标的一种方法是使用--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
。
与GHC_ENVIRONMENT
一起工作会更好:
setx GHC_ENVIRONMENT C:\Users\me\.ghc\x86_64-mingw32-8.10.2\environments\default
它有助于ghc
和ghci
。
之后,我们应该在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,步骤相似。