Как активировать среду anaconda в скрипте Python на удаленной машине?

В настоящее время я пытаюсь найти способ активировать среду anaconda в сценарии Python, который работает на удаленном сервере. Я нашел следующие похожие вопросы о переполнении стека здесь и здесь, но нет успеха с тем, что они предлагают. Я просто продолжаю получать эту простую ошибку sh: 1: source: not found. Насколько я понимаю, это связано с тем, что среда conda не найдена. После долгих исследований я не нашел другого способа сделать это при использовании скрипта Python, но если у кого-то есть предложения, я был бы рад передать некоторые идеи вокруг! Заранее спасибо!

Вот код:

import os 
import subprocess
from subprocess import Popen

value = 'activate punc2'
#os.system("cd /Users/elicobler/tiny_dancer/Testing/thrive/API_text_results")
#os.system('source root/conda3/envs/punc2/bin/activate /root/conda3/envs/punc2')
#os.system('source activate punc2')
#Popen('source activate punc2')
#subprocess.call('source', value)
subprocess.run('source root/conda3/envs/punc2/bin/activate /root/conda3/envs/punc2 && cat /var/www/html/1.22.18 - Monday - Hr 1 - Seg 1-5a65e2698c1dd07f02c25679.txt | python punctuator.py models/endquote.pcl /var/www/html/1.22.18 - Monday - Hr 1 - Seg 1-5a65e2698c1dd07f02c25679.txt && source deactivate', shell=True)

person EliC    schedule 24.01.2018    source источник
comment
На самом деле, я думаю, что сам source не найден. Смотрите мой ответ.   -  person Daniel Farrell    schedule 25.01.2018
comment
@DanFarrell Аааа! Вот правда, забыл, что это будет в шелле, а не в баше! Я попробую это, когда у меня будет шанс позже этим вечером.   -  person EliC    schedule 25.01.2018
comment
Я знаю, что он старый, но ответ действительно таков, что он использует «/bin/sh» вместо bash, где вам нужно просто . вместо source   -  person Tominator    schedule 29.10.2020


Ответы (1)


Ваша оболочка по умолчанию не поддерживает source, но, вероятно, ваша система также поддерживает bash. Попробуйте что-то вроде этого:

subprocess.run("bash -c 'source /root/conda3/envs/punc2/bin/activate /root/conda3/envs/punc2 && ... && source deactivate', shell=True)

Вам не нужна оболочка для вызова оболочки, поэтому вы, вероятно, могли бы уйти с чем-то более похожим на

subprocess.run("/use/bin/env", "bash", "-c", "source /root/conda3/envs/punc2/bin/activate /root/conda3/envs/punc2 && ... && source deactivate")
person Daniel Farrell    schedule 25.01.2018
comment
Это помогло! Пришлось внести небольшие изменения, но все заработало идеально. Спасибо за вашу помощь! - person EliC; 25.01.2018