
我在 Azure 上有一個虛擬機,在 ssh 之後我可以執行 Conda 和 python:
conda activate py36
python some_script.py
要透過 SSH 從我的電腦執行這些命令,我需要提供 Conda 的完整路徑:
ssh ${USER}@${IP} "/data/anaconda/envs/py35/bin/conda activate py36; python some_script.py"
但我收到此錯誤:
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run
$ conda init <SHELL_NAME>
Currently supported shells are:
- bash
- fish
- tcsh
- xonsh
- zsh
- powershell
See 'conda init --help' for more information and options.
IMPORTANT: You may need to close and restart your shell after running 'conda init'.
然而,運行的 shell 是bash
:
$ sshb ${USER}@${IP} echo $SHELL
/bin/bash
如何透過SSH遠端啟動conda環境?
答案1
編輯:在解決這個問題的過程中,我發現conda init
創建了一個名為「conda」的函數,它對 conda 可執行檔進行了偽裝。看type conda
。這允許它在當前 shell 中設定環境變數。這很重要,因為它會導致問題的發生。
當您透過 ssh 執行命令時,它不會執行設定此conda
bash 函數的 ~/.bashrc。
所以我給你的最終答案是
ssh ${USER}@${IP} ". ~/.bashrc ; conda activate py36; python some_script.py"
. ~/.bashrc
如果您之前已經執行過,只需取得提供 conda 函數的 ~/.bashrc 即可conda init
。
舊答案
我建議你用激活和Python程式碼製作一個shell腳本
# job.sh
conda activate py36
python some_script.py
使可運行chmod +x job.sh
然後使用以下命令遠端運行:
ssh ${USER}@${IP} bash -l "<relative path to script on remote machine>"
bash -l
使它成為一個登入外殼,它還允許您使用您的.bash_profile
或,.bashrc
這意味著您不需要提供完整路徑。
如果您絕對需要單一命令,請使用特雷多克。
ssh ${USER}@${IP} bash -l <<HERE
conda activate py36
python some_script.py
HERE
我也嘗試了其他方法,但 bash 在命令分離中保留環境變化的方式似乎存在一些問題。 Conda activate 設定各種環境變數(以 CONDA 和 PATH 變數為前綴)。
答案2
我不需要指定「conda」的路徑,而是指定「activate」的路徑,如下所示:
ssh [host] "source ~/anaconda3/bin/activate [name of conda env] ; cd [pick a dir] ; [command]"
對於 [command] 嘗試「conda env list」以查看啟動了哪個環境。或者你可以做「python foo.py」。
您可能需要調整路徑“~/anaconda3/bin/activate”。
答案3
從此拼湊起來問題我設法通過將這些行添加到我的.bashrc
:
export -f conda
export -f __conda_activate
export -f __conda_reactivate
export -f __conda_hashr
export -f __add_sys_prefix_to_path
eval "$(conda shell.bash hook)"
我不確定解決方案是否export
仍然需要 s,eval
但它們沒有破壞任何東西,所以我保留了它們。
編輯:同樣重要的是要記住,以某種方式使用的任何腳本都需要與和conda
一起運行bash
不是 sh
。
答案4
只是@Maeve Kennedy 答案的補充。最好使用單引號,而不是使用雙引號,如下所示
ssh ${USER}@${IP} '. ~/.bashrc ; conda activate py36; python some_script.py'
它允許您在遠端啟動 conda 環境後執行任何 bash 命令。像下面這樣;
ssh ${USER}@${IP} '. ~/.bashrc ; conda activate py36; echo $CONDA_PATH'
帶雙引號則不起作用。