在DAG文件(或DAG文件导入的模块)中导入pywikibot
时,DAG损坏,并在Web服务器UI中引发错误:
Broken DAG: [/path/to/airflow/dags/dag.py] encode() argument 1 must be str,not bool
我试图找到堆栈跟踪,但是通过在airflow/logs
中进行搜索找不到任何东西。即使运行airflow list_dags
,运行--report
也会成功运行,并且无助于调试问题(按照this question的建议)。
因此,我的问题是:如何在Airflow DAG的任务中使用Pywikibot?
我在下面添加了其他信息,以显示到目前为止我已经尝试过的内容。找到答案后,可以将其删除以简化问题。
以下是示例DAG的代码:
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import timedelta,datetime
#### this part is typically imported from another module ####
# to import,pywikibot requires `user-config.py` file or this env variable
import os
os.environ['PYWIKIBOT_NO_USER_CONFIG'] = '1'
import pywikibot
def do_nothing():
pass
#############################################################
dag = DAG('try_pywikibot',schedule_interval=timedelta(days=1))
default_args = {
'start_date': datetime(2019,1,1),}
task1 = PythonOperator(
python_callable=do_nothing,task_id=f'do_nothing',dag=dag,default_args=default_args,)
关于导入pywikibot
的说明:
除非将user-config.py
env变量指定为PYWIKIBOT_NO_USER_CONFIG
,否则Pywikibot会在工作目录中需要一个配置文件0
。此类文件的示例:
family = 'wikipedia' # required
mylang = 'en' # required
# verbose_output = 0 # optional
我认为可能是由于pywikibot
的日志记录(发送bool
?)引起的。可以通过在verbose_output = 0
的配置文件(pywikibot
)中添加user-config.py
来关闭详细日志记录,但这不能解决问题。
奇怪的是,运行这个简单的脚本
import pywikibot
import airflow
带有user-config.py
的{{1}}文件的仍从{{1}}输出详细日志。但是,当不导入Airflow时,它将一直运行而没有任何日志输出。但是,我尝试通过修改库的verbose_output=0
来完全禁用来自pywikibot
的日志记录,即使导入了Airflow也会禁用日志记录,但是DAG仍然被Airflow破坏了。
当手动触发DAG时,DAG会“启动”,但是任务永远不会排队。他们仍然停留在pywikibot
状态。