我对使用Apache气流很陌生。我使用pycharm作为我的IDE。我创建一个项目(anaconda环境),创建一个包含DAG定义和Bash运算符的python脚本。当我打开气流网络服务器时,未显示我的DAGS。仅显示默认示例DAG。我的AIRFLOW_HOME
变量包含~/airflow
。所以我在这里存储了我的python脚本,现在显示了。
如何在项目环境中使用它?
是否在每个项目开始时更改环境变量?
有没有一种方法可以为每个项目添加特定的气流主目录?
我不想将DAG存储在默认气流目录中,因为我想将其添加到git存储库中。请帮我。
您可以${AIRFLOW_HOME}/airflow.cfg
使用以下格式设置/覆盖环境变量中指定的气流选项:$ AIRFLOW __ {SECTION} __ {KEY}(请注意双下划线)。这是气流文档的链接。所以你可以简单地做
export AIRFLOW__CORE__DAGS_FOLDER=/path/to/dags/folder
但是,针对不同的项目执行此操作很繁琐且容易出错。或者,您可以考虑使用pipenv代替Anaconda来管理虚拟环境。这里是一个很好的引导有关pipenv
,它解决了问题。的默认功能之一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/
注意:用法的使用
Flask==1.03
将在最后解释,但这是因为pipenv检查子依赖项是否兼容,以确保可重复性。
因此,完成这些步骤后,您将获得以下项目结构
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_HOME}/airflow.cfg
文件,并将使用/扩展${AIRFLOW_HOME}/dags
作为的值dags_folder
。如果您仍然需要的其他位置dags_folder
,则可以.env
再次使用file
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
来激活venvpipenv shell
,您将始终获得在.env
导出到venv中定义的变量。最重要的是pipenv
仍然是一个子外壳,因此,当您退出它时,所有其他环境变量也将被清除。pipenv --py
。pipenv
与conda一样,在同一全局位置创建所有venv,但是您可以.venv
通过添加export PIPENV_VENV_IN_PROJECT=1
到您的.bashrc
(或其他rc
)中来更改行为,使其在项目的根目录中创建。然后,当您进入项目解释器的设置时,PyCharm将能够自动将其拾取。Flask==1.0.3
来自PyPi的气流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
GitHub上的最新版本已修复。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句