How to use Airflow with Pywikibot
当在 DAG 文件(或 DAG 文件导入的模块)中导入
1 | Broken DAG: [/path/to/airflow/dags/dag.py] encode() argument 1 must be str, not bool |
我试图找到一个堆栈跟踪,但在
因此,我的问题是:如何在 Airflow DAG 任务中使用 Pywikibot?
我在下面添加了其他信息,以展示我迄今为止所做的尝试。找到答案后,可以删除这个,让问题更简洁。
以下是示例 DAG 的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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 要求在工作目录中有一个配置文件
1 2 3 | family = 'wikipedia' # required mylang = 'en' # required # verbose_output = 0 # optional |
我认为这可能是因为
奇怪的是,运行这个简单的脚本
1 2 | import pywikibot import airflow |
带有
手动触发 DAG 时 DAG 确实"启动",但任务从不排队;他们仍然停留在状态
将
为什么,我不通过 Airflow 运行时,Pywikibot 似乎无法加载
奇怪的是,pywikibot 似乎期望一个布尔值,现在抛出
1 | _DifferentTypeError: Configuration variable"console_encoding" is defined as"str" in your user-config.py but expected"bool". |
但是,这可以放心地忽略。
我遇到了类似的问题,谷歌把我带到了这里。
此解决方案不会解决您的问题,看起来您以不同的方式解决了问题。但是,这可能对其他人有所帮助:
https://phabricator.wikimedia.org/T272088
解决方法是初始化记录器并更改pywiki的logLevel:
1 2 3 4 5 | import logging import pywikibot pywikibot.output('This will initialize the logger') logger = logging.getLogger('pywiki') logger.setLevel(logging.WARNING) |
这是一个解决方法,直到它被修复!
只是一个友好的下次,如果你能说明你使用哪个python/pywikibot版本,它也可以帮助其他人;)
要么:
框架的
Pywikibot 可能已经过时了。
这取决于你的 Python 和 Pywikibot 版本。