安安~在嗎~各位大大~什麼!這種梗透露年齡了嗎~該不會大家都千禧年之後出生的吧~趕快開始今天的內容吧~
先建立一個 dag 用於顯示目前的 library 版本,要顯示的 library 有 requesets 和 pytest
劇透一下~ 這兩個都是後面專案會用到的模組
import requests
import pytest
from datetime import datetime
from airflow.decorators import dag, task
@dag(schedule=None, start_date=datetime(2023, 10, 3), catchup=False)
def show_module_version():
@task
def show_version():
return {"requests version": requests.__version__, "pytest version": pytest.__version__ }
show_version()
show_module_version()
Before Install Library
@dag
、@task
,可以 🎵 回憶過去 🎵 :
docker-compose.yaml
注意:airflow 2.1.1之後才可以用
_PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:-}
.env
環境變數--docker-airflow
|__dags/
|__logs/
|__plugins/
|__config/
|__docker-compose.yaml
|__.env
在.env當中加入環境變數設定
_PIP_ADDITIONAL_REQUIREMENTS=pytest==7.3.2
docker-compose up -d
官方提醒: 建議不要將 _PIP_ADDITIONAL_REQUIREMENTS 用於正式環境,僅用於開發的功能。
有發現我們根本沒安裝 requests 模組嗎,怎麼沒有 error,因為 requests 模組在我們安裝 airflow 時就已經安裝了,如果想知道安裝 airflow 到底還安裝哪些模組,可以進到 docker container 當中執行 pip list
就可以看到了~
--docker-airflow
|__dags/
|__logs/
|__plugins/
|__config/
|__docker-compose.yaml
|__Dockerfile
|__requirements.txt
pytest==7.4.2
requests==2.31.0
pip install
安裝 requirements.txt
裡面的 library 和指定的版本FROM apache/airflow:2.7.1
COPY requirements.txt .
RUN pip install -r requirements.txt
記得 apache/airflow:2.7.1 的版本號要換成你自己的喔~
將在 image: XXX
下方的 # build:
註解打開,把上方的 image: XXX
註解起來
version: '3.8'
x-airflow-common:
&airflow-common
image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.7.1}
# build: .
environment:
上面↑ 要修改成 下面↓
version: '3.8'
x-airflow-common:
&airflow-common
#image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.7.1}
build: .
environment:
代表沒有要用 image: XXX
這個 image 建立 Container,要使用自訂的 Dockerfile 設定 Image 建立 Container,.
代表使用當前 Dockerfile 所在的路徑。
docker-compose up -d
docker-compose 會從 Dockerfile 重新建立 Image,再 create 新的 docker 容器
docker-compose build --no-cache
有發現我故意在方法一:設定 _PIP_ADDITIONAL_REQUIREMENTS
安裝 pytest 之前的版本,這樣方法二:使用 Dockerfile
安裝完才看得出來啊~
這樣回答不知道拿不拿的到 20 點~
明天終於要來講 airflow 的 schedule 排程和時間問題了,這個我覺得有很多「坑」的主題~
方法二 : docker-compose 如果跑到「記憶體不足」,代表 docker Desktop 資源需要再開大一點~