无论如何我可以在气流中设置我的代码将运行的工作目录吗?

Chi*_*mwe 6 python python-3.x airflow

我正在尝试帮助我的数据科学家团队使用气流运行他们的代码。我面临的问题是他们的 python 脚本会读/写一些中间文件。

1) 无论如何设置他们的脚本和文件可以存在的工作目录,以便它不会弄乱 dags 文件夹?

2)即使我使用 dag 文件夹,每次我读/写这些文件时我也必须指定绝对路径。除非有其他办法解决这个问题?

即我必须一直这样做:-

absolute_path="/some/long/directory/path"    
f = os.path.join(absolute_path,file_name)
Run Code Online (Sandbox Code Playgroud)

Meg*_*Ray 1

我所做的是建立一个单独的文件夹,其中包含需要运行的所有模块,并将其添加到气流运行环境中。

PATH_MODULES = "/home/airflow-worker-1/airflow_modules/"

sys.path += [ PATH_MODULES ]

这样,我可以导入这些文件夹中的任何函数(前提是它们具有,__init__.py因为它们被视为包。

airflow_modules
    |_ code_repository_1
    |_ code_repository_2
    |_ code_repository_3
       |_ file_1.py
       |_ config.py
Run Code Online (Sandbox Code Playgroud)

所以在你的 DAG 代码中你使用:

from code_repository_1.data_cleaning       import clean_1
from code_repository_2.bigquery_operations import operation_1
Run Code Online (Sandbox Code Playgroud)

要记住的一件事是,由于这将存储库视为项目,因此如果您需要file_1.py从 导入变量config.py,那么您必须使用相对导入 with from .config import variable_1

  • 不,您肯定必须指定完整路径,您可以在每台计算机中使用环境变量,并将路径的第一部分(`/home/computer`)附加到存储库路径。不过,您必须指定完整的绝对路径,这也使调试变得更加容易。 (2认同)