Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ocaml OPAM:如何在不重新下载的情况下在本地重新安装软件包?_Ocaml_Opam - Fatal编程技术网

Ocaml OPAM:如何在不重新下载的情况下在本地重新安装软件包?

Ocaml OPAM:如何在不重新下载的情况下在本地重新安装软件包?,ocaml,opam,Ocaml,Opam,我想在本地重新编译/重新安装已通过OPAM下载的软件包,但不需要再次下载 opam重新安装似乎总是重新下载该软件包,我看不到禁用它的选项 以下是希望执行此本地重新安装的几个原因: 本地源代码已被修改,用户希望应用修改,而无需手动从原始源代码重建所有内容 当前没有Internet连接,或者连接速度慢/受限制 opam将尝试使下载的包与上游包保持同步。这意味着,如果包位于本地缓存中,并且它与上游包没有区别,那么它就不会被下载 如果要在本地更改源代码,则需要pinpackage。 另一种选择是创建自

我想在本地重新编译/重新安装已通过OPAM下载的软件包,但不需要再次下载

opam重新安装
似乎总是重新下载该软件包,我看不到禁用它的选项

以下是希望执行此本地重新安装的几个原因:

  • 本地源代码已被修改,用户希望应用修改,而无需手动从原始源代码重建所有内容
  • 当前没有Internet连接,或者连接速度慢/受限制

opam
将尝试使下载的包与上游包保持同步。这意味着,如果包位于本地缓存中,并且它与上游包没有区别,那么它就不会被下载

如果要在本地更改源代码,则需要
pin
package。 另一种选择是创建自己的存储库并将其添加到opam中。您的本地存储库可以包含所有包,也可以只包含您感兴趣的几个包。对于处理本地存储库,有一个
opam admin
工具

创建您自己的存储库不是一项很容易的任务,因此我建议您使用
pin
命令,并将您希望在本地拥有的包固定到指定的本地路径

示例(需要opam 1.2或更高版本)


lwt
是任意选择的,只是因为它很短。第一个命令将下载指定版本的源代码,并将它们与
opam
文件一起放入文件夹
lwt.2.4.8
。第二个将强制opam工具使用此特定文件夹作为
lwt
包的源

手册页中提到了OPAMCURL环境变量——据推测,您可以使用它定义用于下载包的curl替换。你考虑过用这个吗?(通过将其设置为一个虚拟脚本,只“获取”本地源,而不是下载它们)但假设您对固定包进行了更改,除了执行繁琐的取消固定然后再次固定外,如何让opam重新编译它呢?这很简单,
opam update lwt;opam upgrade lwt
(实际上,前一个命令在某些情况下甚至可能被省略,但每次发出它都更容易)我明白了,我认为这只在版本号实际更改时起作用,而不是在源代码更改时起作用。谢谢
 opam source lwt.2.4.8
 opam pin add lwt lwt.2.4.8