환경에서 원격으로 로컬 Python 스크립트 실행

환경에서 원격으로 로컬 Python 스크립트 실행

로컬 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

단지 스크립트를 실행하고 종료하려는 경우에는 가상 환경을 활성화할 필요가 없습니다. 가상 환경을 활성화하는 것은 PATH1 을 조정하여 Python 실행 파일을 대체하는 편리한 방법 일 뿐입니다. 그래서 명령은

$ source path/to/myenv/bin/activate
$ python myscript.py
$ deactivate

로 효과적으로 대체할 수 있습니다.

$ path/to/myenv/bin/python myscript.py

따라서 다음을 통해 스크립트를 실행할 때 sshPython 실행 파일의 올바른 경로를 선택하십시오 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. 파일을 찾아 전체 경로를 지정합니다. 원격 컴퓨터에 존재해야 합니다. 또는 이 활성화 스크립트의 기능을 알아보고 해당 작업을 원격 시스템으로 보냅니다.

관련 정보