gpt4 book ai didi

windows - Windows 上真正可移植的 Haskell 安装

转载 作者:可可西里 更新时间:2023-11-01 14:35:26 25 4
gpt4 key购买 nike

是否有可能在 Windows 上安装真正可移植的 Haskell,以便与 Haskell 相关的所有内容都发生在一个目录下。我希望能够在 USB 内存棒上安装 Haskell,这样我就可以通过插入它在任何其他 Windows 计算机上使用它。

这意味着当我说 cabal install somePackage 时,一切都发生在本地并且相对于该单个目录(注意,对于不同的计算机,可能会为 USB 驱动器分配不同的驱动器号)。我希望能够在任何 Windows 计算机上运行 cabal install somePackage。此外,如果我可以将 USB 内存棒的内容复制到本地硬盘并且它仍然可以从那里工作(在某些 Windows 机器上,USB 内存棒以只读方式安装),那就太好了。

我知道以下相关的 StackOverflow 问题 herehere .我可以使用相对路径设置 cabal 的配置文件吗?其他 Haskell 工具(例如 winghci)呢?

那么,我应该怎么做呢?以便携模式安装 Haskell Platform 然后做什么?

最佳答案

按照下面描述的过程:

  1. 使用便携安装安装Haskell Platform例如h:\dev\hp .选择不创建快捷方式。对于 Haskell Stack Setup,选择 h:\dev\hp\local\bin作为目标文件夹。 取消选择添加到用户 %PATH%

  2. 您应该得到以下(第一级)目录结构:

    dev
    hp
    8.0.1
    local
    bin (this where stack.exe gets installed)
  3. 创建额外的子文件夹:

    mkdir projects
    mkdir user
    cd user
    mkdir AppData
    mkdir AppData\Roaming

    dev
    hp
    projects
    user
    AppData
    Roaming
  4. 下载解压junction user 中的实用程序文件夹。创建user\create-symlink.bat内容如下。然后运行它。

    %~dp0junction -nobanner -accepteula -d "%~dp0Application Data"
    %~dp0junction -nobanner -accepteula "%~dp0Application Data" %~dp0AppData\Roaming
    junction "Application Data" AppData\Roaming
  5. 创建 haskell.bath:\dev\hp包含以下内容的文件夹:

    @ECHO OFF
    set HSROOT=%~dp08.0.1
    SET USERPROFILE=%~dp0user
    SET Path=%HSROOT%\bin;%HSROOT%\winghci;%~dp0local\bin;%HSROOT%\mingw\bin;%HSROOT%\msys\usr\bin;%HSROOT%\lib;%HSROOT%\lib\extralibs\bin;%Path%
    CMD /k "cd %~dp0projects"
  6. 运行 haskell.bat并在命令行中键入这些命令。这应该在 user\AppData\Roaming 下创建额外的文件夹结构

    cabal update
    cabal user-config init
    stack setup
  7. 要使 cabal 的配置文件 ( user\AppData\Roaming\cabal\config) 可重定位,编辑它并更改标签如下:

    remote-repo-cache: $prefix\..\..\user\AppData\Roaming\cabal\packages
    world-file: $prefix\..\..\user\AppData\Roaming\cabal\world
    extra-prog-path: $prefix\..\msys\usr\bin
    extra-lib-dirs: $prefix\..\mingw\lib
    extra-include-dirs: $prefix\..\mingw\include
    build-summary: $prefix\..\..\user\AppData\Roaming\cabal\logs\build.log
  8. 使用您最喜欢的文本编辑器对以下文件进行多文件搜索和替换:user\AppData\Roaming\ghc\i386-mingw32-8.0.1\package.conf.d\*.conf

    • 搜索绝对路径并使用 $topdir 替换它们(它评估为 8.0.1 下的目录,我认为它是 h:\dev\hp\8.0.1\lib )。因此,例如,如果您看到 h:\\dev\\hp\user\\Application Data将其替换为 $topdir\\..\\..\\user\\AppData\\Roaming .或者,如果您看到 h:\dev\hp\8.0.1 , 然后将其替换为 $topdir\.. .
  9. 在堆栈的快照文件夹中执行相同的搜索和替换过程,例如user\AppData\Roaming\stack\snapshots\XXX\pkgdb :

  10. 更新全局和用户以及堆栈包缓存:

    `ghc-pkg recache --global`
    `ghc-pkg recache --user`
    `ghc-pkg recache --package-db="h:\dev\hp\user\AppData\Roaming\stack\snapshots\XXX\pkgdb"`
  11. 如果您安装新包,您可能需要重复搜索和替换步骤。或者你可以试试 cabal install --enable-relocatable <package>看看是否可行。

  12. 您应该能够重命名安装文件夹,将其复制到同一台机器上的新位置,或者完全不同的机器上,它应该都能正常工作。只需使用 haskell.bat设置环境并获得命令提示符,您应该可以从中运行 ghc , cabal , stack , winghci

  13. 还有一个问题仍然存在。如果您尝试安装一个需要 gcc 的包要构建,您可能会收到以下错误:

    Configuring network-2.6.3.1...
    bash.exe: warning: could not find /tmp, please create!
    configure: WARNING: unrecognized options: --with-compiler
    checking build system type... bash.exe: warning: could not find /tmp, please create!
    bash.exe: warning: could not find /tmp, please create!
    i686-pc-mingw32
    checking host system type... i686-pc-mingw32
    checking for gcc... h:\dev\hp\80227D~1.1Ăé´ÉŐĂőýŽÇ┬ćýŁŻ┬îŃąÇĂéňżö┬łŃŽ«ĂéŃąÇĂéň庤ťO
    checking whether the C compiler works... no
    configure: error: in `/cygdrive/c/DOCUME~1/UserName/LOCALS~1/Temp/stack4268/network-2.6.3.1':
    configure: error: C compiler cannot create executables
    See `config.log' for more details

    原因是configure脚本被传递给错误的路径 gcc (h:\dev\hp\80227D~1.1Ăé´ÉŐĂőýŽÇ┬ćýŁŻ┬îŃąÇĂéňżö┬łŃŽ«ĂéŃąÇĂéň庤ťO)。我知道如何构建有问题的包 manually ,但不知道如何安装:

    stack unpack network-2.6.3.1
    cd network-2.6.3.1
    stack init
    # edit `configure` script and put `CC=` on the first line to kill system supplied path to `gcc`
    stack build

关于windows - Windows 上真正可移植的 Haskell 安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40185235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com