Com*_*and 7 python apache virtualenv directed-acyclic-graphs airflow
我对使用 apache 气流很陌生。我使用 pycharm 作为我的 IDE。我创建了一个项目(anaconda 环境),创建了一个包含 DAG 定义和 Bash 运算符的 python 脚本。当我打开我的气流网络服务器时,我的 DAGS 没有显示。仅显示默认示例 DAG。我的AIRFLOW_HOME
变量包含~/airflow
. 所以我在那里存储了我的 python 脚本,现在它显示了。
我如何在项目环境中使用它?
我是否在每个项目开始时更改环境变量?
有没有办法为每个项目添加特定的气流主目录?
我不想将我的 DAG 存储在默认的气流目录中,因为我想将它添加到我的 git 存储库中。请帮帮我。
Ily*_*sil 16
您可以${AIRFLOW_HOME}/airflow.cfg
使用以下格式设置/覆盖在环境变量中指定的气流选项:$AIRFLOW__{SECTION}__{KEY}(注意双下划线)。这是气流文档的链接。所以你可以简单地做
export AIRFLOW__CORE__DAGS_FOLDER=/path/to/dags/folder
Run Code Online (Sandbox Code Playgroud)
但是,为不同的项目执行此操作既乏味又容易出错。作为替代方案,您可以考虑使用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/
Run Code Online (Sandbox Code Playgroud)
注意:
Flask==1.03
I 的用法会在最后解释,但这是因为 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
Run Code Online (Sandbox Code Playgroud)
现在,当您第一次初始化气流时,它将创建${AIRFLOW_HOME}/airflow.cfg
文件并将使用/扩展${AIRFLOW_HOME}/dags
为dags_folder
. 如果您仍然需要不同的位置dags_folder
,您可以.env
再次使用文件
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
Run Code Online (Sandbox Code Playgroud)
因此,您的.env
文件将如下所示:
AIRFLOW_HOME=/path/to/my_project/airflow
AIRFLOW__CORE__DAGS_FOLDER=/different/path/to/dags/folder
Run Code Online (Sandbox Code Playgroud)
airflow
在虚拟环境中,因此您需要激活它才能使用airflow
pipenv
你需要使用pipenv shell
来激活 venvpipenv shell
,您总是会在.env
导出到您的 venv 中获得定义的变量。最重要的是pipenv
仍然是一个子shell,因此,当您退出它时,所有其他环境变量也将被清除。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
GitHub 上的最新版本已经修复了这个问题。
归档时间: |
|
查看次数: |
10236 次 |
最近记录: |