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