해결된 질문
작성
·
43
0
Code에서 relativedelta 를 import 해서 실행하면 ModuleNotFoundError 가 발생하는데,
어떻게 해결이 가능한가요?
n8n 은 별도의 n8nio/n8n으로 단독 설치한 버전입니다. (Version 1.99.1)
-- 소스 --
from datetime import datetime
from dateutil.relativedelta import relativedelta
# 이전 노드의 데이터를 가져옵니다.
first_item_json = _input.first().json
code = first_item_json.get("code")
input_ymd = first_item_json.get("ymd") # 'YYYYMM' 형식의 입력값
base_date = None
# 'input_ymd' 값이 유효한 'YYYYMM' 형식인지 확인합니다.
if input_ymd and len(input_ymd) == 6:
try:
# 'YYYYMM' 문자열을 datetime 객체로 변환합니다. (일자는 1일로 자동 설정)
base_date = datetime.strptime(input_ymd, '%Y%m')
print(f"입력된 ymd '{input_ymd}'를 기준으로 계산합니다.")
except ValueError:
# 형식은 맞지만 유효하지 않은 값(예: '202313')일 경우
print(f"잘못된 ymd 값 '{input_ymd}'입니다. 현재 날짜를 기준으로 합니다.")
base_date = datetime.now()
else:
# 'input_ymd' 값이 없거나, 비어있거나, 길이가 6이 아닐 경우
print("ymd 값이 없거나 형식이 올바르지 않아 현재 날짜를 기준으로 합니다.")
base_date = datetime.now()
# 기준 날짜로부터 한 달 전을 계산합니다.
target_date = base_date - relativedelta(months=1)
# 계산된 날짜를 다시 'YYYYMM' 형식의 문자열로 변환합니다.
output_ymd = target_date.strftime('%Y%m')
print(f"최종 계산된 ymd: {output_ymd}")
# 결과를 반환합니다.
return [{
"code": code,
"ymd": output_ymd
}]
--
-- 오류 내용 --
답변 2
0
안녕하세요.
AI Agent 여러 툴 중에 유일하게 N8N이 파이썬 코드를 제공하기는 합니다만 내장 파이썬 인터프리터로 제한된 코드만 실행 가능합니다. 그래서 안타깝게도 외부 패키지를 사용할 수 없습니다.
from dateutil.relativedelta import relativedelta
...
target_date = base_date - relativedelta(months=1)
따라서 위의 코드에서 처럼 날짜를 계산하기 위해 relativedelta 같은 외부 패키지를 사용하실 수 없습니다.
....
base_year = int(input_ymd[:4])
base_month = int(input_ymd[4:6])
....
if base_month == 1:
target_year = base_year - 1
target_month = 12
else:
target_year = base_year
target_month = base_month - 1
그러므로 이런식으로 순수 파이썬 코드만 사용해서 작성하셔야 할 듯 합니다.
결론적으로 다시 정리해 말씀드리면, pip install
명령으로 설치해서 사용하는 패키지는 사용할 수 없고 순수 파이썬이 제공하는 라이브러리만 사용해서 코드를 작성하셔야 합니다. 위의 상황에서 처럼 충분히 순수 파이썬 코드로 대체가 가능한 경우라면 위의 코드처럼 수정하면 되지만 만약 위의 상황과 달리 무조건 외부 패키지를 설치해야 하는경우라면 외부에 파이썬 코드를 작성하고 FastAPI 같은 웹프레임워크를 활용해 API 서버로 구동하고 N8N에서 API를 호출 하는 형태로 작성해야 합니다.
from datetime import datetime
# 입력
first_item_json = _input.first().json
code = first_item_json.get("code")
input_ymd = first_item_json.get("ymd") # 'YYYYMM' 형식
# 기준 날짜 설정
base_year = None
base_month = None
if input_ymd and len(input_ymd) == 6 and input_ymd.isdigit():
try:
base_year = int(input_ymd[:4])
base_month = int(input_ymd[4:6])
if not (1 <= base_month <= 12):
raise ValueError("Invalid month")
except ValueError:
print(f"잘못된 ymd 값 '{input_ymd}'입니다. 현재 날짜를 기준으로 합니다.")
now = datetime.now()
base_year = now.year
base_month = now.month
else:
print("ymd 값이 없거나 형식이 올바르지 않아 현재 날짜를 기준으로 합니다.")
now = datetime.now()
base_year = now.year
base_month = now.month
# 한 달 전 계산
if base_month == 1:
target_year = base_year - 1
target_month = 12
else:
target_year = base_year
target_month = base_month - 1
output_ymd = f"{target_year}{target_month:02d}"
print(f"최종 계산된 ymd: {output_ymd}")
return [{
"code": code,
"ymd": output_ymd
}]
테스트 해보진 않았습니다만 올려주신 코드를 수정하면 아마 위와 같이 작성되야 하지 않을까 합니다. 참고만 해보시기 바랍니다.
0
안녕하세요, 인프런 AI 인턴입니다.
JongGun Lee님께서 겪고 계신 ModuleNotFoundError
는 Python의 모듈이나 패키지를 찾을 수 없을 때 발생하는 오류입니다. 이 오류를 해결하기 위해서는 몇 가지 사항을 확인해보셔야 합니다.
dateutil
패키지 설치 확인relativedelta
함수는 dateutil
패키지의 모듈입니다. 이 패키지가 설치되어 있는지 확인해보시기 바랍니다. 만약 설치되어 있지 않다면, 터미널에서 다음 명령어를 실행하여 설치해 주세요:
pip install python-dateutil
n8n에서 Python 코드를 실행할 수 있도록 설정되어 있는지 확인해야 합니다. ModuleNotFoundError: Module 'os' is blocked
라는 오류는 Pyodide 환경에서 발생한 것으로 보이며, 이는 브라우저의 제약으로 인해 일부 Python 모듈이 차단될 수 있음을 의미합니다. Pyodide에 대한 설정이나 제한이 없는지, 혹은 다른 환경에서 실행 가능한지도 확인해보세요.
Pyodide 환경 내에서 특정 모듈은 지원되지 않을 수 있습니다. 만약 Pyodide를 사용 중이라면 Pyodide 공식 문서를 참조하여 지원되는 모듈과 지원되지 않는 모듈을 확인해 보셔야 합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.