Ubuntu下多用户共享conda环境

详细记录如何配置

  • root 用户安装
  • 多用户共享
  • root 创建只读共享环境
  • 各用户自行创建自己环境

的 anaconda。

网上找到的方法往往配置完用户组和权限便结束了,没有涉及用户新建环境的位置和权限,也没有提到 umask 可能带来的问题。

软件下载

建议使用国内源,例如清华大学开源软件镜像站。下载对应架构的安装包,例如 Anaconda3-2022.05-Linux-x86_64.sh。注意下载的是 anaconda3。

下面假定你在 root 用户中执行指令,并且之前没有安装过 anaconda。

安装

  • 运行下载的文件。你可能想为它增加执行权限,通过 chmod +x
  • 回车开始安装
  • 阅读并输入 yes
  • 指定安装目录,例如 /opt/anaconda3不要放在 root 根目录(~)下
  • 等待安装完成

配置

PATH 路径

使用你喜欢的编辑器打开 /etc/profile,在末尾附加

export PATH=/opt/anaconda3/bin:$PATH

这样做是为了让各用户的终端都能找到conda并运行。如果你安装在其它位置,请对应地更改目录值(下同)。

你可能需要执行 source /etc/profile应用这项更改。

用户组与目录权限

为了使 anaconda 的文件仍归 root 所有,我们将新建一个用户组来为其余用户提供访问权限。

groupadd conda  # 新建一个名为 conda 的组;可以使用其它名称
adduser  conda  # 将需要的用户加入该组
chgrp -R conda /opt/anaconda3  # 将安装目录转给该组
chmod 770 -R /opt/anaconda3  # 设置 root 用户与 conda 组的读写权限
find /opt/anaconda3 -type d -exec chmod g+s {} +  # 设置组继承,使以后新建的文件夹仍属于 conda 组
chmod g-w /opt/anaconda3/envs  # 共享环境只能由 root 修改

指定新环境位置

接下来,为了确保其余用户可以正确地在自己的目录中使用-n 新建环境,还要创建系统级的 anaconda 配置文件。在安装目录下新建.condarc文件并写入

envs_dirs:
  - /opt/anaconda3/envs
  - ~/.conda/envs

根据 Conda configuration,envs_dirs是搜索命名环境的目录列表。创建新的命名环境时将放置在第一个可写位置,因此 root 用户将默认创建在安装目录下,成为共享环境,而其余用户会创建在自己的主目录中。

关于更多的管理选项,参见  Administering a multi-user conda installation。

你可能会想把这个文件的权限设为 644来避免被其余用户改动。这也是默认行为,因为 root 用户的默认 umask 是 0022。我们接下来将介绍这个 umask 可能带来的问题。

关于 umask

umask 控制新建文件的权限,简单来说是对指定的权限位进行排除。详细信息参见它的 维基百科。

前述文件共享的机制是通过组读写权限完成的,意味着 anaconda 的文件需要有用户组的读与写权限。普通用户的默认 umask 是 0002,提供了用户组写仅限,但 root 用户的0022并没有。因此在使用 root 用户创建共享环境前需要修改 umask。

umask 0002
conda create -n env_name python  # 示例
umask 0022  # 你可能会想恢复原值

否则会导致其它用户无权访问某些新下载的包的缓存等问题。在这种情况下,可以找到相应的文件并为其附加用户组写权限chmod g+w

最后

现在你已经安装好了想要的 anaconda。如果有新用户,只需将其加入conda用户组,即可使用共享环境或创建新环境。

参考

  1. https://www.zhihu.com/question/277053071/answer/946713532
  2. https://zhuanlan.zhihu.com/p/570747928

你可能感兴趣的:(python,linux,开发语言)