对于自定义环境,“〜/ miniconda3 / bin”不放在PATH的前面

时间:2019-09-04 13:49:47

标签: terminal conda

我将conda 4.7.11与contains中的HashSet<>一起使用。我使用auto_activate_base: false安装了~/.condarc。它已安装在htop。在conda install -c conda-forge htop环境中时,我可以使用~/miniconda3/bin/htop,因为base放在htop变量之前。但是,当我不在所有环境中时,~/miniconda3/bin之前只有PATH。当我处于~/miniconda3/condabin以外的所有其他环境中时,PATHbase放在~/miniconda3/envs/CUSTOM_ENV/bin而不是~/miniconda3/condabin的前面,这就是为什么我可以使用{{1} }仅来自PATH环境。因此,我的问题是如何在所有环境中使用~/miniconda3/bin安装的htop,包括停用所有环境的情况。

请不要在我的情况下(CentOS)建议不要使用basehtop之类的软件包管理器,因为我没有使用此软件包管理器的root访问权。预先谢谢你。

1 个答案:

答案 0 :(得分:0)

Conda环境没有嵌套,因此 base 中的内容不会被其他人继承。隔离环境是当务之急,因此必须使 base env中的内容在未激活时不可访问。

选项1:环境堆叠

但是,有一个选项可以显式地堆叠环境,这从字面上看就是您要的内容,即,将先前环境的bin/保留在PATH变量中。因此,如果您htop仅安装在 base 中,则可以在其他环境中保留对它的访问权限,例如

conda activate base
conda activate --stack my_env

如果您决定走这条路,我认为对 base 中安装的内容非常少是明智的。当然,您也可以创建一个非 base 的环境进行堆叠,但是必须始终激活此env可能很麻烦,而在默认安装中, base 自动激活。

从Conda v4.8开始,将有一个auto_stack配置选项:

conda config --set auto_stack true

有关详细信息,请参见the documentation on environment stacking

选项2:默认安装

如果您想在每个环境中都拥有htop,但不在Conda环境中,那么天真的解决方案是将其安装在每个环境中。 Conda offers a simple solution to this called Default Packages,并且在Conda配置中的键create_default_packages下。运行以下命令将告诉Conda在创建新环境时始终安装htop

conda config --add create_default_packages htop

很遗憾,这不会更新任何现有的env,因此您仍然必须返回并执行该操作(例如Install a package into all envs)。还有一个--no-default-packages标志,用于在创建新的环境时忽略默认程序包。

选项3:全局安装

警告语

以下两个选项不是官方建议,因此 caveat emptor 以及如果您曾经使用过它们,请务必在报告问题时报告对$PATH的这种非标准操作/将来进行故障排除。

链接

另一种方法(尽管更多手册)是在用户目录(例如~/.local/bin)中创建一个文件夹,该文件夹添加到$PATH中的.bashrc并在其中创建链接您要全局“导出”的二进制文件。我使用了一些我想独立于Conda使用的程序(例如emacs)来进行操作,即使它们是由Conda安装和管理的。

专用环境

如果您打算使用一堆软件来执行此操作,则可以将env专用于此类全局软件,并将其整个./bin目录添加到$PATH中可能会起作用。请勿使用 base 进行此操作-Conda自Conda v4.4起便要严格对其进行管理。此外,请勿使用任何与Python相关的内容:严格遵守本地(已编译)软件(例如,htop是一个很好的例子)。如果您的$PATH上出现了相同版本的其他Python,这可能会导致库加载混乱。我从未尝试过这样做,而是更喜欢手动链接,因为我完全知道我要导出的内容。