2015-05-05 61 views
4

我想本地重新编译/重新安装已经通过OPAM下载的软件包,但不需要再次下载。OPAM:如何在不重新下载的情况下在本地重新安装软件包?

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

这里有一个可能需要执行这个地方重新安装,有几个原因:

  • 本地源已被修改,而该人要申请修改,而不必从手动重建一切原始源代码;
  • 目前没有互联网连接,或者它是缓慢/上限。
+0

该手册页提到了OPAMCURL环境变量 - 据推测,您可以使用它来定义用于下载软件包的卷曲替换。你有没有考虑过使用这个? (通过将其设置为一个虚拟脚本,只是“获取”本地源代码而不是下载它们) –

回答

4

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

如果你想在本地更改源代码,那么你需要pin这个包。 其他选项是创建您自己的存储库并将其添加到您的opam。您的本地存储库可以包含所有软件包或仅包含您感兴趣的几个软件包。为了处理本地存储库,有一个opam-admin工具。

创建自己的存储库并不是一件容易的事情,所以我建议您使用pin命令以及想要在本地拥有的pin包到指定的本地路径。

实施例(需要OPAM 1.2或更高版本)

opam source lwt.2.4.8 
opam pin add lwt lwt.2.4.8 

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

+2

但是,如果您对固定包进行了更改,除非做了一个冗长的解除固定然后重新固定,否则如何让opam重新编译它? –

+2

这很简单,'opam update lwt; opam upgrade lwt'(实际上在某些情况下甚至可以省略以前的命令,但是每次都更容易发布) – ivg

+0

我看到,我认为这只有在版本号实际发生更改时才起作用,而不是源发生更改。谢谢! –

相关问题