93. Anaconda配置
Anaconda创建的虚拟环境多用户共享访问使用
在服务器上的sudo用户安装了anaconda,假设现在配置了虚拟的环境pytorch,需要怎么设置配置文件,才能保证连接服务器的别的标准用户(不具有sudo权限)怎么可以用到这个环境.
软件下载
建议使用国内源,例如清华大学开源软件镜像站。下载对应架构的安装包,例如 Anaconda3-2022.05-Linux-x86_64.sh。注意下载的是 anaconda3。下面假定你在 root 用户中执行指令,并且之前没有安装过 anaconda。
软件安装
运行下载的文件
通过
chmod +x
为它增加执行权限回车开始安装
阅读并输入 yes
指定安装目录,例如
/opt/anaconda3
. (不要放在 root 根目录(~
)下。)等待安装完成
用户组与目录权限
为了使 anaconda 的文件仍归 root 所有,我们将新建一个用户组来为其余用户提供访问权限
1 | groupadd condagroup # 新建一个名为 condagroup 的组;可以使用其它名称 |
新环境位置
接下来,为了确保其余用户可以正确地在自己的目录中使用 -n <name>
新建环境,还要创建系统级的 anaconda 配置文件。在安装目录下(/opt/anaconda3
)新建.condarc
文件并写入
1 | envs_dirs: |
根据 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。
1 | umask 0002 |
否则会导致其它用户无权访问某些新下载的包的缓存等问题。在这种情况下,可以找到相应的文件并为其附加用户组写权限chmod g+w。
新增用户
现在你已经安装好了想要的 anaconda。如果有新用户,只需将其加入condagroup用户组,即可使用共享环境或创建新环境。
conda 环境配置
方法1: 局部(用户)配置 (Recommend)
以普通用户执行如下操作, 但是需要在所有的权限设置完毕之后方可使用
运行命令
eval "$(/opt/anaconda3/bin/conda shell.<YOUR_SHELL_NAME> hook)"
如:
eval "$(/opt/anaconda3/bin/conda shell.zsh hook)"
运行命令
conda init
或conda init <YOUR_SHELL_NAME>
注:
conda init
好像只会修改.bashrc
文件设置关闭自启动base环境
1
conda config --set auto_activate_base false
或者修改文件
~/.condarc
1
auto_activate_base: false
方法2: 全局(root)配置 (Not recommend)
以root用户进行如下操作
使用vim打开
/etc/profile
, 在末尾添加1
export PATH=/opt/anaconda3/bin:$PATH
目的是为了让各用户的终端都能找到conda并运行。如果你安装在其它位置,请对应地更改目录值(下同)
运行
source /etc/profile
应用这项更改
方法3: 直接配置.bashrc或.zshrc
vim ~/.bashrc
在最后一行添加:
1
export PATH="/opt/anaconda3/bin:$PATH"
用来激活环境变量
1
source ~/.bashrc
激活:
source activate
conda activate
退出激活:
source deactivate
conda deactivate
常见问题
Q:
conda create
创建的目录不在~/.conda/envs
A: 删除 /opt/anaconda3/envs/.conda_envs_dir_test
文件
参考:
激活环境时设置环境变量
假设环境名为 env_name
, 在env_name环境目录中, 创建文件夹 etc/conda/activate.d
。在该文件夹下,创建 *.sh
(linux/macos) 或 *.bat
(windows) 文件, 将需设置的环境变量或脚本写入其中, 并通过 chmod +x *.sh
添加可执行权限. 当激活虚拟环境时, 该脚本自动运行.
分步骤如下:
在你的虚拟环境的
etc/conda/activate.d/
目录下创建一个脚本文件1
2
3conda activate env_name
mkdir -p $CONDA_PREFIX/etc/conda/activate.d
touch $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh编辑env_vars.sh文件,添加你需要的环境变量:
1
2
3
4
export MY_VAR="my_value"
export ANOTHER_VAR="another_value"为
env_vars.sh
添加可执行权限:1
chmod +x $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
QAs
UnicodeEncodeError: ‘ascii’ codec can’t encode character ‘\xe4’ in position 89: ordinal not in range(128)
原因: 字符编码问题
解决方案:
方法1: 临时生效
运行命令
1
2export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"再执行你需要执行的命令即可
方法2: 当前用户永久生效
有时 Linux 系统中编码并不能统一使用,而是只针对某用户下才使用该编码,即当使用 FineBI 的时候,在该系统用户下才能使用该编码。因此编辑配置文件时需要在该用户下编辑。
打开
~/.bash_profile
1
vim ~/.bash_profile
在最后一行后面追加:
1
2export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"重启终端或运行
source ~/.bash_profile
注:
~/.bash_profile
是每个用户都可使用该文件输入专用于自己使用的 shell 信息。方法3: 系统级对所有用户永久有效
对整个系统都有效的修改方式,使整个系统都适应于该系统编码。该方法是在系统配置文件中添加编码方式将默认的方式覆盖掉。执行的命令如下:
打开
profile
1
vim /etc/profile
打开文件后在最后一行后面追加:
1
2export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"重启终端或运行
source /etc/profile
方法4: 使用
locale-gen
和/etc/locale.conf
当需要生成并设置系统的默认语言环境时使用。
编辑
/etc/locale.gen
,去掉en_US.UTF-8 UTF-8
以及zh_CN.UTF-8 UTF-8
行前的注释符号(#
):1
vim /etc/locale.gen
然后使用如下命令生成 locale:
1
locale-gen
向
/etc/locale.conf
输入内容:1
echo 'LANG=en_US.UTF-8' > /etc/locale.conf