在 12.04 上,我安装了最新版本的 Ocaml (4.01) 及其所有依赖项。我正在尝试安装 Coq,它依赖于旧版本 (3.12) 的 ocaml-base-nox 运行时(通过虚拟依赖项)。运行后apt-cache policy ocaml-base-nox
输出以下结果:
ocaml-base-nox:
Installed: 4.01.0-1ppa4~precise
Candidate: 4.01.0-1ppa4~precise
Version table:
*** 4.01.0-1ppa4~precise 0
500 http://ppa.launchpad.net/avsm/ppa/ubuntu/ precise/main amd64 Packages
100 /var/lib/dpkg/status
3.12.1-2ubuntu2 0
500 http://us.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages
好的,应该没问题,对吧?我只需要将我的版本切换到 3.12 来安装/使用 coq,然后当我需要更新版本时,我可以切换回 4.01。我不清楚如何做到这一点。经过一番谷歌搜索后,我尝试了以下操作:
$ sudo apt-get install ocaml-base-nox=3.12.1-2ubuntu2
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
camlp4 camlp4-extra ocaml ocaml-base ocaml-compiler-libs ocaml-interp ocaml-native-compilers
ocaml-nox
The following packages will be DOWNGRADED:
ocaml-base-nox
0 upgraded, 0 newly installed, 1 downgraded, 8 to remove and 0 not upgraded.
Need to get 596 kB of archives.
After this operation, 205 MB disk space will be freed.
Do you want to continue [Y/n]?
看起来它要删除我的整个 Ocaml 堆栈,我可能必须从头开始重新安装才能再次使用。此外,我使用 Ocaml 的大部分内容(mirage unikernal 项目)都需要 4.0 或更高版本。
那么,如果有的话,在软件包版本之间切换的正确方法是什么?有没有办法可以强制 apt-get 安装某些东西而不卸载任何东西?
答案1
是的,事实上,你可能根本不需要做任何这些事情。大多数情况下,在像你这样的案例中指定的依赖版本是 >version 的意思,即指定的版本或任何更高版本。如果你想安装 coq,只需输入以下命令,apt-get 就会自动为你调用必要的依赖项。为此,请打开终端并输入以下命令:
sudo apt-get update
sudo apt-get install coq
如果您仍然遇到同样的问题,那么卸载然后重新安装这些软件包就不会有问题了。除非您使用该purge
命令,否则已删除软件的配置文件将保持不变;重新安装将恢复所有用户设置,并且不需要进行任何额外设置。
您可以使用以下命令来恢复这些包:
sudo apt-get install camlp4 camlp4-extra ocaml ocaml-base ocaml-compiler-libs ocaml-interp ocaml-native-compilers ocaml-nox