묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Airflow 완벽 가이드 - Part 1
astro dev start - python 라이브러리 설치 fail
[+] Building 353.8s (9/10) docker:desktop-linux => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 81B 0.0s => [internal] load metadata for astrocrpublic.azurecr.io/runtime:3.2-2 2.2s => [internal] load .dockerignore 0.0s => => transferring context: 113B 0.0s => [1/1] FROM astrocrpublic.azurecr.io/runtime:3.2-2@sha256:466a3e0a33a285fcde43340d6b10dc529284c19ea306e004c2e47d8295e6754d 0.0s => => resolve astrocrpublic.azurecr.io/runtime:3.2-2@sha256:466a3e0a33a285fcde43340d6b10dc529284c19ea306e004c2e47d8295e6754d 0.0s => [internal] load build context 0.0s => => transferring context: 1.21kB 0.0s => CACHED [2/8] ONBUILD COPY packages.txt . 0.0s => CACHED [3/8] ONBUILD RUN /usr/local/bin/install-system-packages 0.0s => CACHED [4/8] ONBUILD COPY requirements.txt . 0.0s => ERROR [5/8] ONBUILD RUN /usr/local/bin/install-python-dependencies 351.0s ------ > [5/8] ONBUILD RUN /usr/local/bin/install-python-dependencies: 0.349 + /usr/local/bin/install-python-dependencies 0.360 Installing python dependencies using uv 0.580 Using Python 3.13.13 environment at: /usr/local 63.58 Resolved 198 packages in 1m 00s 63.68 Downloading flask-appbuilder (2.1MiB) 63.68 Downloading polars-runtime-32 (43.1MiB) 64.31 Downloading botocore (14.3MiB) 64.31 Downloading pyarrow (46.6MiB) 64.32 Downloading lxml (5.0MiB) 64.32 Downloading adbc-driver-manager (4.5MiB) 64.37 Downloading sqlean-py (2.9MiB) 64.37 Downloading connectorx (41.7MiB) 64.38 Downloading adbc-driver-sqlite (1.5MiB) 133.1 Downloaded adbc-driver-sqlite 149.2 Downloaded flask-appbuilder 181.5 Downloaded sqlean-py 206.7 Building pandas==2.1.4 223.0 Downloaded adbc-driver-manager 233.4 Downloaded lxml 345.7 Downloaded botocore 348.0 Building numpy==1.26.4 350.4 × Failed to build `numpy==1.26.4` 350.4 ├─▶ The build backend returned an error 350.4 ╰─▶ Call to `mesonpy.build_wheel` failed (exit status: 1) 350.4 350.4 [stdout] 350.4 + /tmp/.tmpsTSE7P/builds-v0/.tmpEbhjPZ/bin/python 350.4 /tmp/.tmpsTSE7P/sdists-v9/index/dac0d3b231508420/numpy/1.26.4/XkQbLab9UzRfRV7eP-5zy/src/vendored-meson/meson/meson.py 350.4 setup 350.4 /tmp/.tmpsTSE7P/sdists-v9/index/dac0d3b231508420/numpy/1.26.4/XkQbLab9UzRfRV7eP-5zy/src 350.4 /tmp/.tmpsTSE7P/sdists-v9/index/dac0d3b231508420/numpy/1.26.4/XkQbLab9UzRfRV7eP-5zy/src/.mesonpy-39t2gzuy 350.4 -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md 350.4 --native-file=/tmp/.tmpsTSE7P/sdists-v9/index/dac0d3b231508420/numpy/1.26.4/XkQbLab9UzRfRV7eP-5zy/src/.mesonpy-39t2gzuy/meson-python-native-file.ini 350.4 The Meson build system 350.4 Version: 1.2.99 350.4 Source dir: 350.4 /tmp/.tmpsTSE7P/sdists-v9/index/dac0d3b231508420/numpy/1.26.4/XkQbLab9UzRfRV7eP-5zy/src 350.4 Build dir: 350.4 /tmp/.tmpsTSE7P/sdists-v9/index/dac0d3b231508420/numpy/1.26.4/XkQbLab9UzRfRV7eP-5zy/src/.mesonpy-39t2gzuy 350.4 Build type: native build 350.4 Project name: NumPy 350.4 Project version: 1.26.4 350.4 350.4 ../meson.build:1:0: ERROR: Unknown compiler(s): [['cc'], ['gcc'], 350.4 ['clang'], ['nvc'], ['pgcc'], ['icc'], ['icx']] 350.4 The following exception(s) were encountered: 350.4 Running `cc --version` gave "[Errno 2] No such file or directory: 'cc'" 350.4 Running `gcc --version` gave "[Errno 2] No such file or directory: 350.4 'gcc'" 350.4 Running `clang --version` gave "[Errno 2] No such file or directory: 350.4 'clang'" 350.4 Running `nvc --version` gave "[Errno 2] No such file or directory: 350.4 'nvc'" 350.4 Running `pgcc --version` gave "[Errno 2] No such file or directory: 350.4 'pgcc'" 350.4 Running `icc --version` gave "[Errno 2] No such file or directory: 350.4 'icc'" 350.4 Running `icx --version` gave "[Errno 2] No such file or directory: 350.4 'icx'" 350.4 350.4 A full log can be found at 350.4 /tmp/.tmpsTSE7P/sdists-v9/index/dac0d3b231508420/numpy/1.26.4/XkQbLab9UzRfRV7eP-5zy/src/.mesonpy-39t2gzuy/meson-logs/meson-log.txt 350.4 350.4 hint: This usually indicates a problem with the package or the build 350.4 environment. ------ Dockerfile:1 -------------------- 1 | >>> FROM astrocrpublic.azurecr.io/runtime:3.2-2 2 | -------------------- ERROR: failed to build: failed to solve: process "/bin/bash -o pipefail -e -u -x -c /usr/local/bin/install-python-dependencies" did not complete successfully: exit code: 1 What's next: Debug this build failure with Gordon → docker ai "help me fix this build failure" Error: an error was encountered while building the image, see the build logs for details 위 같은 에러가 나서 명령어 docker ai "help me fix this build failure" 로 docker ai 에 진입하고 Gordon 이 requirement.txt 의 버전을 변경했습니다. 바뀐 버전으로 astro dev start 명령어로 build 성공했습니다. # Astro Runtime includes the following pre-installed providers packages: https://www.astronomer.io/docs/astro/runtime-image-architecture#provider-packages apache-airflow-providers-fab apache-airflow-providers-http==5.4.0 apache-airflow-providers-amazon==9.20.0 apache-airflow-providers-mysql==6.4.1 apache-airflow-providers-postgres==6.5.1 numpy>=2 pandas>=2.2 polars[database]==1.37.1 #adbc-driver-manager #adbc-driver-postgresqlai 진단시 메세지 보니까 python 3.13 기반으로 의존성 맞춰주는거 같더라구요.이렇게 변경된 의존성으로 실습 진행해도 될까요?
-
미해결Airflow 완벽 가이드 - Part 1
astro project 실무 적용 질문
안녕하세요! 강의 재밌게 수강하고 있습니다.몇가지 질문드립니다. 수업에서 astro project를 설치하고 로컬 호스트가 아닌 scheduler 컨테이너에 접속하여 직접 dags 파일들을 수정한 이유가 있을까요?제가 이해하기로는 로컬 호스트에서 dags, include, plugins 디렉토리는 각 컨테이너에 공유되기 때문에 로컬 호스트에 있는 코드를 수정하면 될 것 같은데, scheduler의 컨테이너에 직접 접속하여 수정한 이유가 궁금합니다.또한, 실무에서 airflow dev 환경에서 빠르게 테스트하기 위해 컨테이너에 직접 접속하여 코드 수정 및 확인 하는 케이스가 있으신지도 궁금합니다!현재 업무에서 일부 airflow를 직접 구성해서 사용하고 있는데, 로컬에서의 테스트가 불가능(Hive 연동 등으로 인하여)하여 항상 dev 환경에 배포 후 결과를 확인하고 있습니다.강사님께서는 airflow를 운영 및 개발 하시면서 로컬에서 테스트할 수 있는 환경(astro 등)을 구성하여 사용하고 계시는지도 궁금합니다.
-
미해결Airflow 마스터 클래스
pykrx 회원제 전환으로 인한 실습 불가
파이썬으로 주식정보 가져오기 실습을 진행하던 중 제목과 같은 이슈에 대해 알게 되었습니다. 해당 사안을 확인해 주시어 실습내용에 대해 수정요청드립니다.
-
미해결실리콘밸리 데이터 리더가 알려주는 Airflow 기초
48강 csv
안녕하세요, 강사님 우선 좋은 수업 제공해주셔서 좀 더 쉽게 툴을 배우고 있습니다 감사합니다. 다름이 아니라 48강 csv 파일 2개를 어디서 다운로드 받는지 모르겠습니다session_timestamp.csvuser_session_channel.csv자료 다운로드를 클릭하면 pdf만 다운로드 됩니다 학습 관련 질문을 상세하게 남겨주시면 더 좋습니다. 예를 들어 이해가 안 가는 부분이 있다고 하면 강의에서 어느 부분인지 어떤 부분이 이해가 안되는지 등등 추가 정보가 큰 도움이 됩니다. 그리고 에러가 난다면 어떤 에러 메시지가 나오는지 같이 공유해주세요. 혹시라도 유사한 질문이 있었는지 먼저 확인 부탁 드리겠습니다. 서로 예의를 지키며 존중하는 문화를 만들어갔으면 하고 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결Airflow 완벽 가이드 - Part 1
강사님의 로그포맷과 저의 로그포맷이 차이가 있는것 같습니다.
강사님 로그 포맷저의 로그포맷어떤 부분을 수정해야 할까요?
-
미해결Airflow 완벽 가이드 - Part 1
7 강에서 astro dev start를 하는데, localhosst8080화면이 안뜹니다
선생님 안녕하세요.....7강중간까지 무사히 따라왓는데, astro dev start치면 아래사진과 같은 에러로 localhosst8080화면이 뜨질 안습니다 ㅠㅠ 제가 도커 등 완전 초보라서 알기쉽게 조언 좀 부탁드립니다 ㅎㅎㅎ ㅠ
-
미해결Airflow 완벽 가이드 - Part 1
astro dev start에서 building 시간이 깁니다.
안녕하세요. github파일에서 requirements.txtdocker-compose.yml.env 파일 다운후, 아래와 같이 바꿔준뒤에 astro dev start를 했는데요, 처음에는 빌딩하는데 오래 걸리겠거니 했는데, 강의를 듣는 과정에서 너무 오래 걸리네요. 빌딩이 얼마나 걸리는지 알 수 있을까요? 대략 1시간 정도 지났습니다.
-
미해결Airflow 마스터 클래스
수료증 발급
수료증 발급하려는데실명인증하라고만 나오고 수료증 다운로드가 죄지 않습니다
-
미해결Airflow 마스터 클래스
에러 발생 관련 질문드립니다.
from __future__ import annotations import pendulum from airflow.providers.standard.operators.bash import BashOperator from airflow.sdk import DAG, chain with DAG( dag_id="dags_bash_operator", schedule="0 0 * * *", start_date=pendulum.datetime(2023, 1, 1, tz="Asia/Seoul"), catchup=False ) as dag: bash_t1 = BashOperator( task_id="bash_t1", bash_command="echo whoami" ) bash_t2 = BashOperator( task_id="bash_t2", bash_command="echo $HOSTNAME" ) bash_t1 >> bash_t2Log message source details sources=["Could not read served logs: Invalid URL 'http://:8793/log/dag_id=dags_bash_operator/run_id=scheduled__2026-02-03T15:00:00+00:00/task_id=bash_t1/attempt=2.log': No host supplied"]airflow실행시 위와 같은 에러가 발생합니다.
-
미해결Airflow 마스터 클래스
vscode 작업화면에 오류가 발생하지 않습니다.
vscode 작업화면에 오류가 발생하지 않습니다.오탈자가 있을 경우 노란색 줄이나 빨간 줄이 떠야 하는데 뜨지 않아요.
-
미해결Airflow 마스터 클래스
plugins 폴더 생성
안녕하세요!plugins 폴더 생성은 단순히 airflow/plugins/shell 각 폴더 생성해서, sh 파일을 넣어서 수업 부분 진행하면 될까요?위 방법으로 했는데 선생님과 다르게, wsl에서 airflow 경로 안에 plugins가 안보이네요ㅠ
-
미해결Airflow 마스터 클래스
WSL에서 git push 가 안되요 ㅠ
실습내용을 열심히 따라가다 보니 WSL에서 git push하려면 토큰 방식으로 생성된 비번을 입력하라고 하셨는데 하다 보니 아래 캡처와 같이 계속 에러가 나네요. 따라하다 무엇을 잘못한 걸까요? ㅠㅠ 참고로 토큰값 생성은 Tokens(classic)으로도 해보고, Fine-grained tokens로도 생성해서 해 봤습니다. 둘 다 안되네요. ㅠ
-
미해결Airflow 마스터 클래스
chatGPT&Airflow로 블로그 자동 포스팅하기 는 Deprecated 가 필요합니다.
2024년 2월 이후로 Tistory OpenAPI 서비스 종료가 되었다고 합니다. https://tistory.github.io/document-tistory-apis/
-
미해결Airflow 마스터 클래스
github에 회원가입이 안되는데 원인이 뭔지 모르겠어요 ㅠ
캡차 응답을 확인할 수 없습니다. 문제 해결 정보는 https://docs.github.com/articles/troubleshooting-connectivity-problems/#troubleshooting-the-captcha 를 참조하세요.위와 같이 메시지가 뜨는데 회사나 기관의 네트워크을 사용하라고 하는데 꼭 고정IP를 사용해야 하는 건가 해서요. 집이나 도서관 등 유동IP는 사용이 불가능한 건가요?
-
미해결실리콘밸리 데이터 리더가 알려주는 Airflow 기초
자료 다운로드 하면 링크가 모두 클릭이 안됨
자료 다운로드 하면 링크가 모두 클릭이 안됩니다.모든 강의 자료 PDF로 다운로드되며, 하이퍼링크처럼 표시만 되고 클릭 불가합니다. 링크는 다른곳에 따로 올리시는 걸까요?
-
해결됨실리콘밸리 엔지니어와 함께하는 Apache Airflow
apache airflow 설치하기 질문
안녕하세요mac에서 apache 설치하려고 하는데, Apache Airflow 설치하기 강의가learn-apache-airflow-main.zip파일 기반으로 진행되는 걸까요?일단 강의환경에 맞춰서 python 3.10 & airflow 2.6.2 로 가상환경 생성해서 하고있는데 강의에서보이는 파일목록이 따로 생성되지 않아서 문의드립니다..
-
해결됨토스 개발자와 함께하는 Data Workflow Management 기반의 대용량 데이터 처리 설계 패턴
강의에서사용하신 root.py 파일이 안보여서 실습하면서 만든 텍스트 공유 드려요
dynamicDagfrom datetime import datetime, timedelta from airflow import DAG from airflow.operators.python import PythonOperator from db_utils import execute_query import logging def log_task_start(message): logging.info(f"[START] {message}") def log_task_end(message): logging.info(f"[END] {message}") # 분석할 주식 종목 리스트 (설정으로 관리) STOCK_SYMBOLS = ['AAPL','GOOGL','MSFT','AMZN','TSLA'] default_args = { 'owner': 'data-team', 'depends_on_past': False, 'start_date': datetime(2024, 1, 1), 'email_on_failure': False, 'email_on_retry': False, 'retries': 1, 'retry_delay': timedelta(minutes=5), } def analyze_stock_data(symbol, **context): """주식 종목에 대해서, 최근 30일간의 주식 데이터를 분석""" log_task_start(f"주식 분석 - {symbol}") query = """ SELECT symbol, AVG(price) as avg_price, MAX(price) as max_price, MIN(price) as min_price, SUM(volume) as total_volume, COUNT(*) as trading_days FROM stock_prices WHERE symbol = %s AND trade_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) GROUP BY symbol """ result = execute_query(query, [symbol]) if result: data = result[0] print(f"{symbol} 분석 결과:") print(f" 평균 가격: ${data[1]:.2f}") print(f" 최고 가격: ${data[2]:.2f}") print(f" 최저 가격: ${data[3]:.2f}") print(f" 총 거래량: {data[4]:,}") print(f" 거래일수: {data[5]}일") log_task_end(f"주식 분석 - {symbol}") return result def create_stock_dag(symbol): """개별 주식에 대한 DAG 생성 함수""" dag_id = f'stock_analysis_{symbol.lower()}' dag = DAG( dag_id, default_args=default_args, description=f'{symbol} 주식 데이터 분석 DAG', schedule='@daily', catchup=False, tags=['dynamic', 'stock', 'analysis', symbol] ) # 데이터 품질 체크 태스크 def check_data_quality(**context): query = """ SELECT COUNT(*) as count FROM stock_prices WHERE symbol = %s AND trade_date = CURDATE() - INTERVAL 1 DAY """ result = execute_query(query, [symbol]) logging.info(f"{symbol} 데이터 품질 체크: {result[0][0] if result else 0}") return result data_quality_check = PythonOperator( task_id=f'check_data_quality_{symbol.lower()}', python_callable=check_data_quality, dag=dag ) # 주식 분석 태스크 analyze_task = PythonOperator( task_id=f'analyze_{symbol.lower()}', python_callable=analyze_stock_data, op_kwargs={'symbol': symbol}, dag=dag ) # 결과 저장 태스크 def save_results(**context): query = """ INSERT INTO daily_stats (symbol, summary_date, avg_price, total_volume, trade_count) SELECT %s, CURDATE() - INTERVAL 1 DAY, AVG(price), SUM(volume), COUNT(*) FROM stock_prices WHERE symbol = %s AND trade_date = CURDATE() - INTERVAL 1 DAY ON DUPLICATE KEY UPDATE avg_price = VALUES(avg_price), total_volume = VALUES(total_volume), trade_count = VALUES(trade_count) """ result = execute_query(query, [symbol, symbol]) logging.info(f"{symbol} 분석 결과 저장 완료") return result save_results = PythonOperator( task_id=f'save_analysis_{symbol.lower()}', python_callable=save_results, dag=dag ) # 태스크 의존성 설정 data_quality_check >> analyze_task >> save_results return dag # Dynamic DAG 생성 # 각 주식 종목에 대해 별도의 DAG 생성 for symbol in STOCK_SYMBOLS: dag_id = f'stock_analysis_{symbol.lower()}' globals()[dag_id] = create_stock_dag(symbol)CrossDag (트리거 센서)from datetime import datetime, timedelta from airflow import DAG, Dataset from airflow.operators.python import PythonOperator from airflow.operators.trigger_dagrun import TriggerDagRunOperator from airflow.sensors.external_task import ExternalTaskSensor from db_utils import execute_query import logging #기본 설정 default_args = { 'owner': 'data-team', 'start_date': datetime(2024, 1, 1), 'retries': 1, 'retry_delay': timedelta(minutes=2), } # ======================================================== # TriggerDagRunOperator # ======================================================== def process_data(**context): """간단한 데이터 처리""" logging.info("데이터 처리 시작") query = "SELECT COUNT(*) FROM stock_prices" result = execute_query(query) count = result[0][0] if result else 0 logging.info(f"처리된 레코드 수 : ${count}") return {"record_count": count} trigger_dag = DAG( 'trigger_example_dag', default_args=default_args, description='TriggerDagRunOperator 예제', schedule='@daily', catchup=False, tags=['cross-dag', 'trigger'] ) process_task = PythonOperator( task_id='process_data', python_callable=process_data, dag=trigger_dag ) #다른 DAG를 트리거 (가장 기본적인 사용법) trigger_next_dag = TriggerDagRunOperator( task_id='trigger_sensor_dag', trigger_dag_id='sensor_example_dag', wait_for_completion=False, # 완료를 기다리지 않음 dag=trigger_dag ) process_task >> trigger_next_dag # ======================================================== # ExternalTaskSensor # ======================================================== # 두 번째 DAG: 외부 태스크 대기 def analyze_triggered_data(**context): """트리거된 후 분석 작업""" logging.info("외부 태스크 완료 후 분석 시작") # 간단한분석로직 analysis_result = {"status": "completed", "timestamp": str(datetime.now())} logging.info(f"분석 완료: {analysis_result}") return analysis_result sensor_dag = DAG( 'sensor_example_dag', default_args=default_args, description='ExternalTaskSensor 예제', schedule=None, # 트리거로만 실행됨 catchup=False, tags=['cross-dag', 'sensor'] ) # 외부 DAG의 태스크 완료를 기다림 def get_most_recent_dag_run(dt): """가장 최근의 DAG 실행을 찾는 함수""" from airflow.models import DagRun from airflow.utils.session import provide_session @provide_session def get_recent_run(session=None): recent_run = session.query(DagRun).filter( DagRun.dag_id == 'trigger_example_dag', DagRun.state == 'success' ).order_by(DagRun.execution_date.desc()).first() if recent_run: return recent_run.execution_date return dt return get_recent_run() wait_for_external_task = ExternalTaskSensor( task_id='wait_for_process_data', external_dag_id='trigger_example_dag', # 기다릴 DAG external_task_id='process_data', # 기다릴 태스크 execution_date_fn=get_most_recent_dag_run, #최근성공한 실행 DAG timeout=60, # 1분 타임아웃 poke_interval=5, # 5초마다 확인 allowed_states=['success'], #성공 상태만 기다림 dag=sensor_dag ) analyze_task = PythonOperator( task_id='analyze_triggered_data', python_callable=analyze_triggered_data, dag=sensor_dag ) wait_for_external_task >> analyze_task # ======================================================== # Dataset Denpendencies # ======================================================== # Dataset 정의 (Dataset Dependencies 용) market_data_dataset = Dataset("market_data") analysis_dataset = Dataset("analysis_result") def create_market_data(**context): """마켓 데이터를 생성하고 Dataset을 업데이트""" logging.info("마켓 데이터 생성 시작") # 실제 데이터 생성 로직 query = """ SELECT symbol, AVG(price) as avg_price FROM stock_prices WHERE trade_date = CURDATE() - INTERVAL 1 DAY GROUP BY symbol LIMIT 3 """ result = execute_query(query) market_data = [] if result: for row in result: market_data.append({"symbol": row[0], "avg_price": float(row[1])}) logging.info(f"생성된 마켓 데이터: {market_data}") return market_data dataset_producer_dag = DAG( 'dataset_producer_dag', default_args=default_args, description='Dataset Dependencies - 생산자', schedule='@daily', catchup=False, tags=['cross-dag', 'dataset', 'producer'] ) create_data_task = PythonOperator( task_id='create_market_data', python_callable=create_market_data, outlets=[market_data_dataset], # Dataset 업데이트 알림 dag=dataset_producer_dag ) # Consumer def consume_market_data(**context): """생성된 마켓 데이터를 소비하여 분석""" logging.info("마켓 데이터 소비 및 분석 시작") # Dataset이 업데이트되면 자동으로 실행됨 query = "SELECT COUNT(DISTINCT symbol) FROM stock_prices" result = execute_query(query) symbol_count = result[0][0] if result else 0 analysis = { "total_symbols": symbol_count, "analysis_time": str(datetime.now()), "status": "Dataset 기반 분석 완료" } logging.info(f"Dataset 기반 분석 결과: {analysis}") return analysis def generate_final_report(**context): """최종 리포트 생성""" logging.info("최종 리포트 생성") ti = context['ti'] analysis = ti.xcom_pull(task_ids='consume_market_data') report = f"Dataset 기반 리포트: {analysis.get('total_symbols', 0)}개 심볼 분석 완료" logging.info(report) return report dataset_consumer_dag = DAG( 'dataset_consumer_dag', default_args=default_args, description='Dataset Dependencies - 소비자', schedule=[market_data_dataset], # Dataset이 업데이트되면 실행 catchup=False, tags=['cross-dag', 'dataset', 'consumer'] ) consume_task = PythonOperator( task_id='consume_market_data', python_callable=consume_market_data, outlets=[analysis_dataset], # 다음 Dataset 업데이트 dag=dataset_consumer_dag ) report_task = PythonOperator( task_id='generate_final_report', python_callable=generate_final_report, dag=dataset_consumer_dag ) consume_task >> report_task
-
미해결실리콘밸리 데이터 리더가 알려주는 Airflow 기초
48강 강의 여전히 49강과 같은 강의가 나옵니다
48. Postgres 테이블 읽어오기 강의가 여전히 49 49. Postgres 테이블 읽어오기와 같은 강의가 나옵니다. 이론 강의가 아닌 실습강의가 나오고 있습니다.
-
미해결Airflow 마스터 클래스
설치중인데 venv를 꼭 써야할까요?
venv로 해서 하니까 이전에 있었던 라이브러리들이 안먹혀서요? 문제는 없나요?
-
미해결Airflow 마스터 클래스
설치 버전 관련 질문입니다.
도커를 사용한 것은 3.1.3 버전으로 다운 받고, 파이썬 3.9 버전에서 다운 받는 것은 3.0.4 버전으로 다운받았는데 혹시 문제 발생할 것이 있을까요?