我对使用 apache Airflow 很陌生。我使用 pycharm 作为我的 IDE。我创建了一个项目(anaconda 环境),创建了一个包含 DAG 定义和 Bash 运算符的 python 脚本。当我打开我的 Airflow 网络服务器时,我的 DAGS 没有显示。仅显示默认示例 DAG。我的 AIRFLOW_HOME
变量包含 ~/airflow
.所以我在那里存储了我的 python 脚本,现在它显示了。
我如何在项目环境中使用它?
我是否在每个项目开始时更改环境变量?
有没有办法为每个项目添加特定的 Airflow 主目录?
我不想将我的 DAG 存储在默认的 Airflow 目录中,因为我想将它添加到我的 git 存储库中。请帮帮我。
最佳答案
您可以设置/覆盖在 ${AIRFLOW_HOME}/airflow.cfg
中指定的 Airflow 选项使用以下格式使用环境变量: $AIRFLOW__{SECTION}__{KEY} (注意双下划线)。这是一个 link到 Airflow 文档。所以你可以简单地做
export AIRFLOW__CORE__DAGS_FOLDER=/path/to/dags/folder
但是,为不同的项目执行此操作既乏味又容易出错。作为替代方案,您可以考虑使用 pipenv用于管理虚拟环境而不是 Anaconda。这是一个 nice guide关于 pipenv
以及它解决的问题。 default features其中之一的 pipenv
是它自动加载 .env
中定义的变量当您在激活 virtualenv 的情况下生成 shell 时生成文件。所以这就是你的工作流程 pipenv
可能看起来像:cd /path/to/my_project
# Creates venv with python 3.7
pipenv install --python=3.7 Flask==1.0.3 apache-airflow==1.10.3
# Set home for airflow in a root of your project (specified in .env file)
echo "AIRFLOW_HOME=${PWD}/airflow" >> .env
# Enters created venv and loads content of .env file
pipenv shell
# Initialize airflow
airflow initdb
mkdir -p ${AIRFLOW_HOME}/dags/
Note: usage of
Flask==1.03
I will explain at the end, but this is because pipenv checks whether sub-dependencies are compatible in order to ensure reproducibility.
因此,在这些步骤之后,您将获得以下项目结构
my_project
├── airflow
│ ├── airflow.cfg
│ ├── airflow.db
│ ├── dags
│ ├── logs
│ │ └── scheduler
│ │ ├── 2019-07-07
│ │ └── latest -> /path/to/my_project/airflow/logs/scheduler/2019-07-07
│ └── unittests.cfg
├── .env
├── Pipfile
└── Pipfile.lock
现在,当您第一次初始化 Airflow 时,它会创建 ${AIRFLOW_HOME}/airflow.cfg
文件并将使用/扩展 ${AIRFLOW_HOME}/dags
作为 dags_folder
的值.如果您仍然需要为 dags_folder
设置不同的位置,您可以使用 .env
再次归档echo "AIRFLOW__CORE__DAGS_FOLDER=/different/path/to/dags/folder" >> .env
因此,您 .env
文件将如下所示:AIRFLOW_HOME=/path/to/my_project/airflow
AIRFLOW__CORE__DAGS_FOLDER=/different/path/to/dags/folder
我们取得了什么成就以及为什么这会很好地工作airflow
在虚拟环境中,您需要激活它才能使用 airflow
pipenv
做的,您需要使用 pipenv shell
为了激活venv pipenv shell
, 你总是会得到定义在 .env
中的变量导出到您的 venv 中。最重要的是pipenv
仍将是一个子shell,因此,当您退出它时,所有其他环境变量也将被清除。 关于 pipenv 的附加说明
pipenv --py
提供的路径. pipenv
像 conda 一样在相同的全局位置创建所有 venv,但您可以将该行为更改为创建 .venv
在项目的根目录中添加 export PIPENV_VENV_IN_PROJECT=1
进入您的 .bashrc
(或其他 rc
)。然后,当您进入项目解释器的设置时,PyCharm 将能够自动拾取它。 Flask==1.0.3
的使用注意事项来自 PyPi 的 Airflow 1.10.3 取决于
flask>=1.0, <2.0
并在 jinja2>=2.7.3, <=2.10.0
.今天,当我测试代码片段时,最新可用的 flask
是 1.1.0 这取决于 jinja2>=2.10.1
.这意味着虽然 pipenv 可以安装所有需要的软件,但它无法锁定依赖项。所以为了干净地使用我的代码示例,我必须指定 flask
的版本需要版本 jinja2
符合 Airflow 要求。但是没有什么可担心的。最新版airflow
在 GitHub 上已经解决了这个问题。
关于python - 如何在虚拟环境中使用 apache Airflow ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56890937/