安装opam之后,它要求
eval `opam config env`它的确切用途是什么?
赏金:在哪里运行eval $(opam env)
什么时候应该运行eval $(opam env)?
在奥帕姆迷幻剂之后?在开关启动之前?例如,如果我有:
conda install -c conda-forge opam
opam init
# - install coq: see
opam switch create debug_proj_4.09.1 4.09.1
opam switch debug_proj_4.09.1
opam repo add coq-released https://coq.inria.fr/opam/released
# install the right version of coq and pins it to it so that future opam installs don't change the coq version
opam pin add coq 8.11.0我把eval $(opam env)放在哪里?
发布于 2022-06-08 15:34:05
tldr:它根据当前的开关激活您的opam上下文--类似于python中激活python虚拟env的方式,但对于opam.则是如此。
eval $(opam env)所做的是计算opam env命令的结果。(在这里,$( )是命令替换)。命令替换通常用于计算bash中命令的输出。在python中,eval会将输入字符串解释为用于计算、解析和在这里运行的文本python代码,类似地,它也会这样做,但假设它是bash (据我猜测)。
opam env是做什么的?它返回当前开关的当前bash变量(即开关大约等于opam环境)。因此,我们要做:
eval $(opam env)这是:
$(cmd)所做的。这是命令替代。通常用于嵌套命令。$(opam env)的输出字符串)给eval。opam env返回“激活:当前opam”所需的env变量字符串(类似于python中激活虚拟env的方式)。eval计算它从命令替换中收到的字符串,即它将字符串解析为bash命令并运行它。完整性请参见opam env的输出
(iit_synthesis) brandomiranda~ ❯ opam env
OPAM_SWITCH_PREFIX='/Users/brandomiranda/.opam/4.12.1'; export OPAM_SWITCH_PREFIX;
CAML_LD_LIBRARY_PATH='/Users/brandomiranda/.opam/4.12.1/lib/stublibs:/Users/brandomiranda/.opam/4.12.1/lib/ocaml/stublibs:/Users/brandomiranda/.opam/4.12.1/lib/ocaml'; export CAML_LD_LIBRARY_PATH;
OCAML_TOPLEVEL_PATH='/Users/brandomiranda/.opam/4.12.1/lib/toplevel'; export OCAML_TOPLEVEL_PATH;
PATH='/Users/brandomiranda/.opam/4.12.1/bin:/Users/brandomiranda/miniconda/envs/iit_synthesis/bin:/Users/brandomiranda/miniconda/condabin:/usr/local/bin:/Users/brandomiranda/.opam/4.12.1/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin'; export PATH;当前猜测安装顺序是什么(在dockerfile中):
# - setp up opam
#RUN conda install -c conda-forge opam
RUN opam init --disable-sandboxing
RUN opam switch create debug_proj_4.09.1 4.09.1
RUN opam switch debug_proj_4.09.1
# RUN eval $(opam env)
RUN opam repo add coq-released https://coq.inria.fr/opam/released
RUN opam pin add -y coq 8.11.0
RUN opam install -y coq-serapi
RUN eval $(opam env)
# Don't think it should work since dockerfiles are not suppose to be editable. Need to run this every time you log?
# makes sure depedencies are installed once already in the docker image
RUN pip install pycoq关于向后滴答的评论:
请注意:在
eval之后,opam env周围显示的背面滴答是必不可少的。它们改变应用程序的顺序,这是非常重要的。后面的代码告诉系统首先计算opam env(它返回一个命令字符串),然后eval在字符串中执行这些命令。执行它们不会返回任何内容,但是它会在幕后初始化Opam环境。参考文献:https://ocaml.org/docs/up-and-running
另见:
https://stackoverflow.com/questions/30155960
复制相似问题