배경
윈도우에 스크립트를 두고 아래 명령어를 통해 파워쉘로 실행하고자 했다.
command=f'cd {default_path}; poetry shell; python [2]hwp_to_pdf.py'
실행이 안됐다.
원인 파악 및 해결과정
로그를 확인해보니 가상환경이 활성화 된걸 확인했다. 경로도 스크립트 파일이 있는 경로가 맞다.
[2024-07-10, 03:09:59 UTC] {winrm.py:129} INFO - Try the new cross-platform PowerShell https://aka.ms/pscore6 [2024-07-10, 03:09:59 UTC] {winrm.py:129} INFO - [2024-07-10, 03:09:59 UTC] {winrm.py:129} INFO - (.venv) PS C:\Users\weare\pro-ollama\pdf-rag>
즉 두번째까지 실행되고 세번째 python [2]hwp_to_pdf.py가 실행이 안된 것
3.결과적으로 아래처럼 바꿔 해결했다. poetry run python "[1]crawling.py" 으로 바꿔서 해결했다.
remote_command = f'cd "{default_path}" && poetry run python "[1]crawling.py"'
이유는 뭐였을까?
poetry shell과
poetry run` 사이의 차이
poetry shell
의 동작 방식:poetry shell
명령은 가상 환경을 활성화하는 새로운 인터랙티브 쉘 세션을 시작합니다. 이 쉘은 사용자와의 인터랙션을 기다리는 상태가 됩니다.- 이 때문에
poetry shell
을 사용하고 이어서 명령을 실행하려 하면, 그 명령들이 새롭게 시작된 쉘 세션에서 실행되지 않습니다. 다시 말해,poetry shell
다음의 명령은 쉘에 입력되지 않고 기본 쉘에서 계속 실행됩니다.
poetry run
의 효율성:poetry run
명령은 대화형 셸을 시작하지 않는다. 그냥 가상 환경을 자동으로 활성화하고, 지정된 명령어(여기서는 Python 스크립트)를 즉시 실행합니다. 이는 배치 작업이나 자동화된 스크립트 실행에 적합합니다.- 이 방법은 Airflow와 같은 자동화 툴에서 사용하기에 적합하며, 스크립트를 효과적으로 실행할 수 있도록 돕습니다.
결론적으로, 기존 코드에서 문제가 되었던 부분은 poetry shell
이 새로운 인터랙티브 쉘을 열고 해당 쉘에서는 이후의 명령들이 실행되지 않았기 때문입니다. Airflow는 비인터랙티브 환경에서 작동하므로, poetry shell
을 통한 환경에서는 후속 명령을 적절히 처리할 수 없었습니다. poetry run
으로 변경한 후에는 가상 환경에서 직접 필요한 파이썬 스크립트를 실행할 수 있게 되어 문제가 해결된 것입니다.
'오류 해결 과정' 카테고리의 다른 글
ValueError: Ollama call failed with status code 500. Details: {"error":"llama runner process has terminated: CUDA error\""} (2) | 2024.07.24 |
---|---|
험난했던 원격 실행 도전기(PsExec,WinRMOperator) (0) | 2024.07.15 |
ChromeDriver 'DevToolsActivePort' 오류 해결: --no-sandbox 옵션의 중요성 (0) | 2024.07.07 |
win32com 모듈 ssh 미동작 에러 (0) | 2024.07.02 |
(python 설치 에러) A newer version of the Python launcher is already installed (1) | 2024.06.19 |