首页 > 解决方案 > "~/miniconda3/bin" 不会在自定义环境的 PATH 之前添加

问题描述

我将 conda 4.7.11 与auto_activate_base: falsein一起使用~/.condarc。我htop使用conda install -c conda-forge htop. 它安装在~/miniconda3/bin/htop. 当我在base环境中时,我可以使用htop,因为~/miniconda3/bin它预先添加到PATH变量中。但是当我在所有环境之外时,只会~/miniconda3/condabinPATH. 当我在除此之外的所有其他环境中并且base被添加到但不是时,这就是为什么我只能从环境中使用。所以我的问题是关于如何能够在所有环境中使用安装的,包括所有环境都被停用的情况。~/miniconda3/envs/CUSTOM_ENV/bin~/miniconda3/condabinPATH~/miniconda3/binhtopbasehtopconda

请不要建议使用像aptyum在我的情况下(CentOS)这样的包管理器,因为我没有使用这个包管理器的 root 访问权限。先感谢您。

标签: terminalconda

解决方案


Conda 环境没有嵌套,因此base中的内容不会被其他环境继承。隔离环境是必不可少的要求,因此在未激活基本env 中的内容时无法访问它应该是有意义的。

选项 1:环境堆叠

但是,有一个选项可以显式堆叠环境,此时字面意思是您所要求的,即将以前的环境保留bin/PATH变量中。因此,如果您htop仅安装在base中,那么您可以像这样在其他环境中保留对它的访问权限

conda activate base
conda activate --stack my_env

如果您决定走这条路,我认为谨慎的做法是尽量减少您在base中安装的内容。当然,您也可以创建一个非基础环境来堆叠,但是必须始终激活此环境可能会很麻烦,而在默认安装中,基础环境会自动激活。

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

conda config --set auto_stack true

有关详细信息,请参阅有关环境堆叠的文档

选项 2:默认安装

如果您想htop在每个环境中而不是在 Conda 环境之外,那么天真的解决方案是将它安装在每个环境中。Conda 对此提供了一个简单的解决方案,称为Default Packages,它位于 Conda config 项下create_default_packages。运行以下命令将告诉 Condahtop在创建新环境时始终安装:

conda config --add create_default_packages htop

不幸的是,这不会更新任何现有的环境,因此您仍然必须返回并执行此操作(例如,将软件包安装到所有环境中)。在创建新环境时还有一个--no-default-packages忽略默认包的标志。

选项 3:全球安装

一个谨慎的词

以下两个选项不是官方建议,因此请谨慎购买,如果您确实使用过它们,请务必$PATH在将来报告问题/疑难解答时报告此类非标准操作。

链接

另一种选择(虽然更手动)是在您的用户目录(例如,~/.local/bin)中创建一个文件夹,您将其添加到$PATH您的文件夹中,.bashrc并在其中创建指向您希望全局“导出”的二进制文件的链接。我使用一些我想独立于 Conda 使用的程序(例如,emacs)来执行此操作,即使它们是由 Conda 安装和管理的。

专用环境

如果您打算使用一堆软件来执行此操作,那么将 env 专用于此类全局软件并将其整个./bin目录添加到$PATH. 不要对base执行此操作- 自 Conda v4.4 以来,Conda 希望对其自身进行严格管理。此外,不要对任何与 Python 相关的内容执行此操作:严格使用本机(编译)软件(例如,htop这是一个很好的例子)。如果同一版本的其他 Python 最终出现在您$PATH的身上,这可能会在库加载中造成混乱。我从来没有尝试过这个并且更喜欢手动链接,因为我确切地知道我正在导出什么。


推荐阅读