로컬 Python 스크립트를 원격으로 실행하고 싶지만 먼저 원격 시스템에서 올바른 환경을 활성화하십시오. 예를 들어, 로컬로 실행하는 경우 다음을 수행합니다.
source activate myenv
python myscript.py
SSH를 사용하면 다음과 같이 할 수 있을 것 같습니다.
ssh user@host "source activate myenv && python" < ./myscript.py
그러나 이것은 작동하지 않는 것 같습니다. 오류 메시지가 생성됩니다.
bash: activate: No such file or directory
이와 같은 작업을 수행하는 가장 좋은 방법은 무엇입니까?
답변1
단지 스크립트를 실행하고 종료하려는 경우에는 가상 환경을 활성화할 필요가 없습니다. 가상 환경을 활성화하는 것은 PATH
1 을 조정하여 Python 실행 파일을 대체하는 편리한 방법 일 뿐입니다. 그래서 명령은
$ source path/to/myenv/bin/activate
$ python myscript.py
$ deactivate
로 효과적으로 대체할 수 있습니다.
$ path/to/myenv/bin/python myscript.py
따라서 다음을 통해 스크립트를 실행할 때 ssh
Python 실행 파일의 올바른 경로를 선택하십시오 myenv
.
$ ssh user@host "path/to/myenv/bin/python" < ./myscript.py
1 이 외에 VIRTUAL_ENV
환경변수를 설정하고 PS1
.
답변2
최근(2022년 7월)에도 비슷한 문제가 발생했습니다. Django를 실행하는 원격 프로덕션 서버에서 일부 유지 관리를 수행하려고 합니다.
이 작업을 수동으로 수행할 수 있지만 스크립트를 통해 수행하는 것은 어렵습니다.
ssh user@host
cd DjangoFolder
pipenv shell
python manage.py migrate
나는 노력했다
ssh user@host "/pathTo/python3 /separatePathTo/manage.py migrate"
적절한 Python 및 Manage.py를 찾는 데 도움이 되지만 경로에 가상 환경 위치가 없습니다(설치된 패키지에 필요합니다.).
마침내 나를 위해 일한 솔루션은
ssh user@host "cd DjangoFolder; pipenv run python manage.py migrate;"
참고할 몇 가지 사항이 있습니다.
- "pipenv run"은 "pipenv shell"을 사용하여 만든 적절한 가상 환경에서 내 명령을 실행하고 있습니다.
- "cd DjangoFolder"가 적절한 폴더로 이동하므로 Pipenv가 올바른 가상 환경을 활성화합니다.
- 동일한 셸 인스턴스에 두 명령을 모두 포함합니다(같은 문자열에 넣고 세미콜론으로 구분하세요.), 두 명령 간의 컨텍스트를 유지하는 것이 중요합니다.
답변3
source activate myenv
셸에서 실행할 수 있는 경우 활성화는 이어야 합니다 $PATH
. 파일을 찾아 전체 경로를 지정합니다. 원격 컴퓨터에 존재해야 합니다. 또는 이 활성화 스크립트의 기능을 알아보고 해당 작업을 원격 시스템으로 보냅니다.