web-dev-qa-db-ja.com

「スタートアップアプリケーション」スクリプトでconda環境をアクティブにする

pythonアニメーションを生成するスクリプトがあり、conda環境にあるライブラリが必要です。コンピュータの電源が入ったらすぐにこのスクリプトを実行する必要があるので、 「起動アプリケーション」に追加した短いbashスクリプトを記述しました。このbashスクリプトは起動時に実行され、次のように表示されます。

#!/bin/bash

conda activate myenv
cd ~/scripts
python generate.py

これをターミナルで自分で実行する場合は問題ありませんが、コンピュータの電源を入れるたびにpythonスクリプトの一部が実行されず、エラーを確認すると次のようになります。

conda: command not found

また、pythonスクリプトが実行に失敗したこともわかります。これは、(conda環境がアクティブ化されていないために)ライブラリがないためです。

「conda activate」を「source activate」で置き換えるbashスクリプトに行を追加してみました。bashスクリプトにecho ". /home/<user>/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrcを追加し、「conda」を/home/barrat/anaconda3/bin/condaで置き換え、さらにwhoamiを起動時に実行するbashスクリプトに追加して、偶然に魔法のようにrootにならないようにしています...これはどれも機能していません。私は本当にどんな助けにも感謝します。それは午前3時で、私は少し必死です。

2
Robbie Barrat

私はコメントしますが、十分な評判がないので、代わりにここに私の推測を答えとして書いています。

conda initは、.bashrcの最後に次の行を追加しました

# >>> conda init >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$(CONDA_REPORT_ERRORS=false '/home/<user>/anaconda3/bin/conda' Shell.bash hook 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/<user>/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/home/<user>/anaconda3/etc/profile.d/conda.sh"
        CONDA_CHANGEPS1=false conda activate base
    else
        export PATH="/home/<user>/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda init <<<

それが正確に何をしているのかはわかりませんが、何らかの形でパスにコンダを追加しているようです。 (また、明らかにconda activateを使用するようにシェルを正しく構成します)

それらの行によってcondaが「初期化」される前にスクリプトが実行される場合、おそらくbashはその時点でcondaが何であるかを認識していません。だから文句を言うconda: command not found

スクリプトの前にこれらの行を実行して、機能するかどうかを確認できます。

2
giray