作者:Jack Wu
現(xiàn)象
AWS Ubuntu AMI機器學(xué)習(xí)服務(wù)器無法自動激動 conda 的 tensorflow 環(huán)境問題。如我們想自動活動tensorflow_p36,在conda的提示下,于是在.bashrc中追加如下配置:
. /home/ubuntu/anaconda3/etc/profile.d/conda.sh
conda activate tensorflow_p36
但登錄后發(fā)現(xiàn)使用的Python仍然是conda base的Python:
(tensorflow_p36) ubuntu@ip:~$ which python
which python
/home/ubuntu/anaconda3/bin/python
原因
當(dāng)?shù)卿浕騮mux或bash嵌套時,腳本調(diào)用順序.profile -> .bashrc。而.profile的內(nèi)容如下。
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# for private env
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
export PATH="/home/ubuntu/anaconda3/bin:$PATH"
可以發(fā)現(xiàn),其最后兩行的環(huán)境變量配置,覆蓋了conda activate tensorflow_p36生成的環(huán)境變量,通過env查看PATH可看到,
PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin:/home/ubuntu/anaconda3/bin/:/home/ubuntu/anaconda3/envs/tensorflow_p36/bin:/home/ubuntu/bin:/home/ubuntu/.local/bin:/home/ubuntu/anaconda3/bin/:/usr/local/cuda/bin:/usr/local/bin ...
而這時我們已經(jīng)在tensorflow_p36環(huán)境中,再運行conda activate tensorflow_p36也無效果。臨時的解決方法是先deactivate再激活tensorflow_p36,以再覆蓋一次環(huán)境變量PATH。
conda deactivate
conda activate tensorflow_p36
PATH=/home/ubuntu/anaconda3/envs/tensorflow_p36/bin:/home/ubuntu/bin:/home/ubuntu/.local/bin:/home/ubuntu/anaconda3/bin/:/home/ubuntu/anaconda3/envs/tensorflow_p36/bin:/home/ubuntu/bin:/home/ubuntu/.local/bin:/home/ubuntu/anaconda3/bin/:/usr/local/cuda/bin:/usr/local/bin ...
如何分析出如上的原因呢,可以在.bashrc頭加上set -x,使bash打印每次運行的腳本的第一行信息:
#Source .dlamirc in .bashrc
set -x
source ~/.dlamirc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
...
解決
從上面可以看出,比較偷懶的解決方法是,修改.bashrc中的 tensorflow_p36 激活腳本為如下:
. /home/ubuntu/anaconda3/etc/profile.d/conda.sh
conda deactivate
conda activate tensorflow_p36