python - 如何在虚拟环境中使用 apache Airflow ?

标签 python apache virtualenv airflow directed-acyclic-graphs

我对使用 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,因此,当您退出它时,所有其他环境变量也将被清除。
  • 使用 Airflow 的不同项目将有不同的日志文件等位置。

  • 关于 pipenv 的附加说明
  • 为了使用用 pipenv 创建的 venv 作为 IDE 的项目解释器,请使用 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/

    相关文章:

    apache - 有没有办法强制来自 www.abc.com 的流量通过 htaccess 或 dns 转到 abc.com?

    python - 运行 os.system virtualenv OpenCV 时导入模块错误

    python - 将 Python venv 移动到另一台没有互联网的机器

    python - 在 python 中使用 Popen 输入重定向

    apache - 将 403 Forbidden 重定向到 404 Not Found 的问题

    python - 嵌入式 python - Numpy 导入时出错

    wordpress 在安装插件时要求输入 ftp 密码

    python - 虚拟环境中的 0MQ

    Python:如何根据重复行 reshape 数据框?

    python - 从列表的笛卡尔积中排序的元组