无法引用包
Unable to reference a package
由于据报道缺少 Text.Pandoc.JSON
依赖项,我无法 运行(或编译)一个简单的脚本。这个问题类似于另一个问题:Pandoc 'Could not find module ...' for installed module
这是脚本:
import Text.Pandoc.JSON
pagebreakXml :: String
pagebreakXml = "<w:p><w:r><w:br w:type=\"page\"/></w:r></w:p>"
pagebreakBlock :: Block
pagebreakBlock = RawBlock (Format "openxml") pagebreakXml
blockSwapper :: Block -> Block
blockSwapper (Para [Str "<div class=\"docxPageBreak\"></div>"]) = pagebreakBlock
blockSwapper blk = blk
main = toJSONFilter blockSwapper
为了编译它,我安装了 Haskell 以及 pandoc
包,如下所示:
$ curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
$ cabal install pandoc
安装大约需要 20 分钟。
现在,当我尝试 运行 它时,我得到了这个:
$ runghc -v docx-page-filter.hs
Glasgow Haskell Compiler, Version 8.8.3, stage 2 booted by GHC version 8.6.3
Using binary package database: /Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/package.conf.d/package.cache
package flags []
loading package database /Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/package.conf.d
wired-in package ghc-prim mapped to ghc-prim-0.5.3
wired-in package integer-wired-in mapped to integer-gmp-1.0.2.0
wired-in package base mapped to base-4.13.0.0
wired-in package rts mapped to rts
wired-in package template-haskell mapped to template-haskell-2.15.0.0
wired-in package ghc mapped to ghc-8.8.3
package flags []
loading package database /Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/package.conf.d
wired-in package ghc-prim mapped to ghc-prim-0.5.3
wired-in package integer-wired-in mapped to integer-gmp-1.0.2.0
wired-in package base mapped to base-4.13.0.0
wired-in package rts mapped to rts-1.0
wired-in package template-haskell mapped to template-haskell-2.15.0.0
wired-in package ghc mapped to ghc-8.8.3
*** Desugar:
*** Simplify [expr]:
!!! Simplify [expr]: finished in 0.18 milliseconds, allocated 0.056 megabytes
*** CorePrep [expr]:
!!! CorePrep [expr]: finished in 3.22 milliseconds, allocated 1.706 megabytes
*** ByteCodeGen [Ghci1]:
!!! ByteCodeGen [Ghci1]: finished in 0.11 milliseconds, allocated 0.029 megabytes
Loading package ghc-prim-0.5.3 ... linking ... done.
Loading package integer-gmp-1.0.2.0 ... linking ... done.
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name libiconv.dylib
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name liblibiconv.dylib
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name iconv.lib
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name libiconv.lib
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name libiconv.dll.a
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name iconv.dll.a
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name libiconv.a
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name iconv.a
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name libiconv
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name iconv
Loading package base-4.13.0.0 ... linking ... done.
Search directories (user):
Search directories (gcc):
*** Desugar:
*** Simplify [expr]:
!!! Simplify [expr]: finished in 0.07 milliseconds, allocated 0.044 megabytes
*** CorePrep [expr]:
!!! CorePrep [expr]: finished in 0.03 milliseconds, allocated 0.014 megabytes
*** ByteCodeGen [Ghci1]:
!!! ByteCodeGen [Ghci1]: finished in 0.05 milliseconds, allocated 0.028 megabytes
*** Desugar:
*** Simplify [expr]:
!!! Simplify [expr]: finished in 0.10 milliseconds, allocated 0.061 megabytes
*** CorePrep [expr]:
!!! CorePrep [expr]: finished in 0.04 milliseconds, allocated 0.022 megabytes
*** ByteCodeGen [Ghci1]:
!!! ByteCodeGen [Ghci1]: finished in 0.11 milliseconds, allocated 0.065 megabytes
*** Chasing dependencies:
Chasing modules from:
!!! Chasing dependencies: finished in 0.04 milliseconds, allocated 0.021 megabytes
Stable obj: {}
Stable BCO: {}
unload: retaining objs []
unload: retaining bcos []
Ready for upsweep []
Upsweep completely successful.
*** Deleting temp files:
Deleting:
*** Chasing dependencies:
Chasing modules from: *docx-page-filter.hs
!!! Chasing dependencies: finished in 0.60 milliseconds, allocated 0.334 megabytes
Stable obj: {}
Stable BCO: {}
unload: retaining objs []
unload: retaining bcos []
Ready for upsweep
[NONREC
ModSummary {
ms_hs_date = 2020-07-01 09:51:29.83381948 UTC
ms_mod = Main,
ms_textual_imps = [(Nothing, Prelude), (Nothing, Text.Pandoc.JSON)]
ms_srcimps = []
}]
*** Deleting temp files:
Deleting:
compile: input file docx-page-filter.hs
*** Checking old interface for Main (use -ddump-hi-diffs for more details):
[1 of 1] Compiling Main ( docx-page-filter.hs, interpreted )
*** Parser [Main]:
!!! Parser [Main]: finished in 0.35 milliseconds, allocated 0.332 megabytes
*** Renamer/typechecker [Main]:
!!! Renamer/typechecker [Main]: finished in 1.57 milliseconds, allocated 0.021 megabytes
docx-page-filter.hs:1:1: error:
Could not find module ‘Text.Pandoc.JSON’
Locations searched:
Text/Pandoc/JSON.hs
Text/Pandoc/JSON.lhs
Text/Pandoc/JSON.hsig
Text/Pandoc/JSON.lhsig
|
1 | import Text.Pandoc.JSON
| ^^^^^^^^^^^^^^^^^^^^^^^
Upsweep partially successful.
*** Deleting temp files:
Deleting:
Failed, no modules loaded.
*** Deleting temp files:
Deleting:
*** Deleting temp dirs:
Deleting:
$
当我尝试通过 ghc --make -v docx-page-filter.hs
编译它时,我得到了类似的输出。
我注意到的可能有帮助的事情:
上面的输出包含这些行:
Search directories (user):
Search directories (gcc):
这是否意味着安装的库不在编译器的搜索路径中?是否可以手动告诉编译器在哪里查找包裹?
以下命令不输出任何内容:
$ cabal list --installed | grep pandoc
$
$ ghc-pkg list | grep pandoc
$
但是,运行以下显示pandoc
:
$ ls -l /Users/eugene/.cabal/store/ghc-8.8.3/ | grep pndc
drwxr-xr-x 5 eugene staff 160 Jul 1 15:07 pndc-2.10-1cd05aed
drwxr-xr-x 5 eugene staff 160 Jul 1 15:07 pndc-2.10-e61ae373
drwxr-xr-x 5 eugene staff 160 Jul 1 14:52 pndc-typs-1.21-39168129
$
尝试安装或重新安装 pandoc
导致无操作:
$ cabal install pandoc
Resolving dependencies...
Up to date
Symlinking 'pandoc'
$
$ cabal install pandoc --reinstall
Resolving dependencies...
Up to date
Symlinking 'pandoc'
$
有人能看出我做错了什么吗? 我不需要 cabal.project
文件或任何东西,我需要编译一个文件并使用它。但我可以尝试探索 cabal.project
.
几轮谷歌搜索让我意识到,为了指定包的路径,必须使用 -package-db
选项。
在我的例子中,为了编译文件,我必须这样做:
ghc --make -v docx-page-filter.hs -package-db=/Users/eugene/.cabal/store/ghc-8.8.3/package.db
在此处对问题的出色回答中有更多关于此事的信息:
由于据报道缺少 Text.Pandoc.JSON
依赖项,我无法 运行(或编译)一个简单的脚本。这个问题类似于另一个问题:Pandoc 'Could not find module ...' for installed module
这是脚本:
import Text.Pandoc.JSON
pagebreakXml :: String
pagebreakXml = "<w:p><w:r><w:br w:type=\"page\"/></w:r></w:p>"
pagebreakBlock :: Block
pagebreakBlock = RawBlock (Format "openxml") pagebreakXml
blockSwapper :: Block -> Block
blockSwapper (Para [Str "<div class=\"docxPageBreak\"></div>"]) = pagebreakBlock
blockSwapper blk = blk
main = toJSONFilter blockSwapper
为了编译它,我安装了 Haskell 以及 pandoc
包,如下所示:
$ curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
$ cabal install pandoc
安装大约需要 20 分钟。
现在,当我尝试 运行 它时,我得到了这个:
$ runghc -v docx-page-filter.hs
Glasgow Haskell Compiler, Version 8.8.3, stage 2 booted by GHC version 8.6.3
Using binary package database: /Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/package.conf.d/package.cache
package flags []
loading package database /Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/package.conf.d
wired-in package ghc-prim mapped to ghc-prim-0.5.3
wired-in package integer-wired-in mapped to integer-gmp-1.0.2.0
wired-in package base mapped to base-4.13.0.0
wired-in package rts mapped to rts
wired-in package template-haskell mapped to template-haskell-2.15.0.0
wired-in package ghc mapped to ghc-8.8.3
package flags []
loading package database /Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/package.conf.d
wired-in package ghc-prim mapped to ghc-prim-0.5.3
wired-in package integer-wired-in mapped to integer-gmp-1.0.2.0
wired-in package base mapped to base-4.13.0.0
wired-in package rts mapped to rts-1.0
wired-in package template-haskell mapped to template-haskell-2.15.0.0
wired-in package ghc mapped to ghc-8.8.3
*** Desugar:
*** Simplify [expr]:
!!! Simplify [expr]: finished in 0.18 milliseconds, allocated 0.056 megabytes
*** CorePrep [expr]:
!!! CorePrep [expr]: finished in 3.22 milliseconds, allocated 1.706 megabytes
*** ByteCodeGen [Ghci1]:
!!! ByteCodeGen [Ghci1]: finished in 0.11 milliseconds, allocated 0.029 megabytes
Loading package ghc-prim-0.5.3 ... linking ... done.
Loading package integer-gmp-1.0.2.0 ... linking ... done.
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name libiconv.dylib
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name liblibiconv.dylib
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name iconv.lib
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name libiconv.lib
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name libiconv.dll.a
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name iconv.dll.a
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name libiconv.a
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name iconv.a
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name libiconv
*** gcc:
gcc -DTABLES_NEXT_TO_CODE -B/Users/eugene/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/base-4.13.0.0 --print-file-name iconv
Loading package base-4.13.0.0 ... linking ... done.
Search directories (user):
Search directories (gcc):
*** Desugar:
*** Simplify [expr]:
!!! Simplify [expr]: finished in 0.07 milliseconds, allocated 0.044 megabytes
*** CorePrep [expr]:
!!! CorePrep [expr]: finished in 0.03 milliseconds, allocated 0.014 megabytes
*** ByteCodeGen [Ghci1]:
!!! ByteCodeGen [Ghci1]: finished in 0.05 milliseconds, allocated 0.028 megabytes
*** Desugar:
*** Simplify [expr]:
!!! Simplify [expr]: finished in 0.10 milliseconds, allocated 0.061 megabytes
*** CorePrep [expr]:
!!! CorePrep [expr]: finished in 0.04 milliseconds, allocated 0.022 megabytes
*** ByteCodeGen [Ghci1]:
!!! ByteCodeGen [Ghci1]: finished in 0.11 milliseconds, allocated 0.065 megabytes
*** Chasing dependencies:
Chasing modules from:
!!! Chasing dependencies: finished in 0.04 milliseconds, allocated 0.021 megabytes
Stable obj: {}
Stable BCO: {}
unload: retaining objs []
unload: retaining bcos []
Ready for upsweep []
Upsweep completely successful.
*** Deleting temp files:
Deleting:
*** Chasing dependencies:
Chasing modules from: *docx-page-filter.hs
!!! Chasing dependencies: finished in 0.60 milliseconds, allocated 0.334 megabytes
Stable obj: {}
Stable BCO: {}
unload: retaining objs []
unload: retaining bcos []
Ready for upsweep
[NONREC
ModSummary {
ms_hs_date = 2020-07-01 09:51:29.83381948 UTC
ms_mod = Main,
ms_textual_imps = [(Nothing, Prelude), (Nothing, Text.Pandoc.JSON)]
ms_srcimps = []
}]
*** Deleting temp files:
Deleting:
compile: input file docx-page-filter.hs
*** Checking old interface for Main (use -ddump-hi-diffs for more details):
[1 of 1] Compiling Main ( docx-page-filter.hs, interpreted )
*** Parser [Main]:
!!! Parser [Main]: finished in 0.35 milliseconds, allocated 0.332 megabytes
*** Renamer/typechecker [Main]:
!!! Renamer/typechecker [Main]: finished in 1.57 milliseconds, allocated 0.021 megabytes
docx-page-filter.hs:1:1: error:
Could not find module ‘Text.Pandoc.JSON’
Locations searched:
Text/Pandoc/JSON.hs
Text/Pandoc/JSON.lhs
Text/Pandoc/JSON.hsig
Text/Pandoc/JSON.lhsig
|
1 | import Text.Pandoc.JSON
| ^^^^^^^^^^^^^^^^^^^^^^^
Upsweep partially successful.
*** Deleting temp files:
Deleting:
Failed, no modules loaded.
*** Deleting temp files:
Deleting:
*** Deleting temp dirs:
Deleting:
$
当我尝试通过 ghc --make -v docx-page-filter.hs
编译它时,我得到了类似的输出。
我注意到的可能有帮助的事情:
上面的输出包含这些行:
Search directories (user): Search directories (gcc):
这是否意味着安装的库不在编译器的搜索路径中?是否可以手动告诉编译器在哪里查找包裹?
以下命令不输出任何内容:
$ cabal list --installed | grep pandoc $ $ ghc-pkg list | grep pandoc $
但是,运行以下显示
pandoc
:$ ls -l /Users/eugene/.cabal/store/ghc-8.8.3/ | grep pndc drwxr-xr-x 5 eugene staff 160 Jul 1 15:07 pndc-2.10-1cd05aed drwxr-xr-x 5 eugene staff 160 Jul 1 15:07 pndc-2.10-e61ae373 drwxr-xr-x 5 eugene staff 160 Jul 1 14:52 pndc-typs-1.21-39168129 $
尝试安装或重新安装
pandoc
导致无操作:$ cabal install pandoc Resolving dependencies... Up to date Symlinking 'pandoc' $ $ cabal install pandoc --reinstall Resolving dependencies... Up to date Symlinking 'pandoc' $
有人能看出我做错了什么吗? 我不需要 cabal.project
文件或任何东西,我需要编译一个文件并使用它。但我可以尝试探索 cabal.project
.
几轮谷歌搜索让我意识到,为了指定包的路径,必须使用 -package-db
选项。
在我的例子中,为了编译文件,我必须这样做:
ghc --make -v docx-page-filter.hs -package-db=/Users/eugene/.cabal/store/ghc-8.8.3/package.db
在此处对问题的出色回答中有更多关于此事的信息: