terminal - "~/miniconda3/bin" 不会在自定义环境的 PATH 之前添加
问题描述
我将 conda 4.7.11 与auto_activate_base: false
in一起使用~/.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
PATH
~/miniconda3/bin
htop
base
htop
conda
请不要建议使用像apt
或yum
在我的情况下(CentOS)这样的包管理器,因为我没有使用这个包管理器的 root 访问权限。先感谢您。
解决方案
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
的身上,这可能会在库加载中造成混乱。我从来没有尝试过这个并且更喜欢手动链接,因为我确切地知道我正在导出什么。
推荐阅读
- c++ - 了解使用模板和类继承编写的 C++ 代码
- php - 类型化属性 User::$DateCreated 必须是 DateTime 的实例,使用字符串
- swift - 无法为数组参数扩展约束协议
- pandas - Pandas 数据框将列视图复制或附加到新行中
- sql - 在哪里/如何存储和检查特定的用户限制?
- django - 如何在模板中将 django-treebeard MP 显示为下拉菜单?
- google-cloud-firestore - 我是否需要将“whereIn”和可以在 Firestore 中包含两个值的字段值分开?
- node.js - 用于获取 github 存储库的 Api 在 Node.js 中不起作用
- php - 如何在 Codeigniter 4 的单个控制器中访问两个不同的模型?
- c# - ASP.NET MVC 核心错误-> DbUpdateConcurrencyException:数据库操作预计会影响 1 行,但实际上影响了 0 行