我将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
以外的所有其他环境中时,PATH
和base
放在~/miniconda3/envs/CUSTOM_ENV/bin
而不是~/miniconda3/condabin
的前面,这就是为什么我可以使用{{1} }仅来自PATH
环境。因此,我的问题是如何在所有环境中使用~/miniconda3/bin
安装的htop
,包括停用所有环境的情况。
请不要在我的情况下(CentOS)建议不要使用base
或htop
之类的软件包管理器,因为我没有使用此软件包管理器的root访问权。预先谢谢你。
答案 0 :(得分:0)
Conda环境没有嵌套,因此 base 中的内容不会被其他人继承。隔离环境是当务之急,因此必须使 base env中的内容在未激活时不可访问。
但是,有一个选项可以显式地堆叠环境,这从字面上看就是您要的内容,即,将先前环境的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。
如果您想在每个环境中都拥有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
标志,用于在创建新的环境时忽略默认程序包。
以下两个选项不是官方建议,因此 caveat emptor 以及如果您曾经使用过它们,请务必在报告问题时报告对$PATH
的这种非标准操作/将来进行故障排除。
另一种方法(尽管更多手册)是在用户目录(例如~/.local/bin
)中创建一个文件夹,该文件夹添加到$PATH
中的.bashrc
并在其中创建链接您要全局“导出”的二进制文件。我使用了一些我想独立于Conda使用的程序(例如emacs
)来进行操作,即使它们是由Conda安装和管理的。
如果您打算使用一堆软件来执行此操作,则可以将env专用于此类全局软件,并将其整个./bin
目录添加到$PATH
中可能会起作用。请勿使用 base 进行此操作-Conda自Conda v4.4起便要严格对其进行管理。此外,请勿使用任何与Python相关的内容:严格遵守本地(已编译)软件(例如,htop
是一个很好的例子)。如果您的$PATH
上出现了相同版本的其他Python,这可能会导致库加载混乱。我从未尝试过这样做,而是更喜欢手动链接,因为我完全知道我要导出的内容。