我遇到了一个奇怪的进口气流问题.我想创建一个其他人可以从中导入的模块.我还想在此模块上运行单元测试.然而,我注意到,只要你从气流包中导入任何东西,它就会try 运行气流.

示例:

# myfile.py
from airflow import DAG

print("Hello world")

然后用python myfile.py运行它,结果是:

(.venv) c:\Users\Jarro\Development\airflow-tryout-import>python myfile.py
WARNING:root:OSError while attempting to symlink the latest log directory
Traceback (most recent call last):
  File "c:\Users\Jarro\Development\airflow-tryout-import\myfile.py", line 1, in <module>
    from airflow import DAG
  File "C:\Users\Jarro\Development\airflow-tryout-import\.venv\Lib\site-packages\airflow\__init__.py", line 68, in <module>
    settings.initialize()
  File "C:\Users\Jarro\Development\airflow-tryout-import\.venv\Lib\site-packages\airflow\settings.py", line 559, in initialize
    configure_orm()
  File "C:\Users\Jarro\Development\airflow-tryout-import\.venv\Lib\site-packages\airflow\settings.py", line 237, in configure_orm
    raise AirflowConfigException(
airflow.exceptions.AirflowConfigException: Cannot use relative path: `sqlite:///C:\Users\Jarro/airflow/airflow.db` to connect to sqlite. Please use absolute path such as `sqlite:////tmp/airflow.db`.

除了错误本身,我实际上更担心的是,我似乎无法从Airflow导入东西,而没有副作用(如数据库初始化).在这件事上我是不是全错了?有没有其他方法可以从Airflow导入东西,而不会产生这些副作用,例如用于打字?

推荐答案

这是由于ipoorts在python中的工作方式造成的. 您正在从包含__init__文件的airflow包中导入. 如果你判断它,里面有一段代码,它完成了所有气流初始化的事情.

lines 67-68 in __init__py:
if not os.environ.get("_AIRFLOW__AS_LIBRARY", None):
settings.initialize()

如果您只想像您所说的那样导入要打字的内容,可以设置 _AIRFLOW__AS_LIBRARY环境变量设置为任何值,它将不会初始化.

Python相关问答推荐

从webhook中的短代码(而不是电话号码)接收Twilio消息

点到面的Y距离

为什么默认情况下所有Python类都是可调用的?

使用groupby Pandas的一些操作

如何更改分组条形图中条形图的 colored颜色 ?

Python解析整数格式说明符的规则?

多处理队列在与Forking http.server一起使用时随机跳过项目

考虑到同一天和前2天的前2个数值,如何估算电力时间序列数据中的缺失值?

Django admin Csrf令牌未设置

在Python中使用if else或使用regex将二进制数据如111转换为001""

并行编程:同步进程

用两个字符串构建回文

使用tqdm的进度条

Python—在嵌套列表中添加相同索引的元素,然后计算平均值

使用SQLAlchemy从多线程Python应用程序在postgr中插入多行的最佳方法是什么?'

Django抛出重复的键值违反唯一约束错误

为什么我的scipy.optimize.minimize(method=";newton-cg";)函数停留在局部最大值上?

遍历列表列表,然后创建数据帧

Stats.ttest_ind:提取df值

如何在不不断遇到ChromeDriver版本错误的情况下使用Selify?