오류 해결 과정

가상 환경 활성화 후 스크립트 실행 시 오류

필만이 2024. 7. 10. 15:21

배경

윈도우에 스크립트를 두고 아래 명령어를 통해 파워쉘로 실행하고자 했다.
command=f'cd {default_path}; poetry shell; python [2]hwp_to_pdf.py'
실행이 안됐다.

원인 파악 및 해결과정

  1. 로그를 확인해보니 가상환경이 활성화 된걸 확인했다. 경로도 스크립트 파일이 있는 경로가 맞다.

    [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> 
  2. 즉 두번째까지 실행되고 세번째 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 shellpoetry run` 사이의 차이

  1. poetry shell의 동작 방식:

    • poetry shell 명령은 가상 환경을 활성화하는 새로운 인터랙티브 쉘 세션을 시작합니다. 이 쉘은 사용자와의 인터랙션을 기다리는 상태가 됩니다.
    • 이 때문에 poetry shell을 사용하고 이어서 명령을 실행하려 하면, 그 명령들이 새롭게 시작된 쉘 세션에서 실행되지 않습니다. 다시 말해, poetry shell 다음의 명령은 쉘에 입력되지 않고 기본 쉘에서 계속 실행됩니다.
  2. poetry run의 효율성:

    • poetry run 명령은 대화형 셸을 시작하지 않는다. 그냥 가상 환경을 자동으로 활성화하고, 지정된 명령어(여기서는 Python 스크립트)를 즉시 실행합니다. 이는 배치 작업이나 자동화된 스크립트 실행에 적합합니다.
    • 이 방법은 Airflow와 같은 자동화 툴에서 사용하기에 적합하며, 스크립트를 효과적으로 실행할 수 있도록 돕습니다.

결론적으로, 기존 코드에서 문제가 되었던 부분은 poetry shell이 새로운 인터랙티브 쉘을 열고 해당 쉘에서는 이후의 명령들이 실행되지 않았기 때문입니다. Airflow는 비인터랙티브 환경에서 작동하므로, poetry shell을 통한 환경에서는 후속 명령을 적절히 처리할 수 없었습니다. poetry run으로 변경한 후에는 가상 환경에서 직접 필요한 파이썬 스크립트를 실행할 수 있게 되어 문제가 해결된 것입니다.