Я пытаюсь создать PythonVirtualOperator, а оператор вызывает функцию только для того, чтобы распечатать сообщение.
def func(**kwargs):
print("hello")
Я определил оператор следующим кодом:
pv = PythonVirtualenvOperator(
task_id="pv",
python_callable=func,
op_kwargs={"test": "pv"},
python_version='3.6'
)
При срабатывании дага я получил ошибку:
[2020-05-06 02:03:33,899] {base_task_runner.py:115} INFO - Job 31244: Subtask ge b'Traceback (most recent call last):\n File "/tmp/venvuv3m91vw/script.py", line 3, in <module>\n with open(sys.argv[1], "rb") as f: arg_dict = pickle.load(f)\nModuleNotFoundError: No module named \'my_python_virtual_operator_test\'\n'
[2020-05-06 02:03:34,316] {taskinstance.py:1059} ERROR - Command '['/tmp/venvuv3m91vw/bin/python', '/tmp/venvuv3m91vw/script.py', '/tmp/venvuv3m91vw/script.in', '/tmp/venvuv3m91vw/script.out', '/tmp/venvuv3m91vw/string_args.txt']' returned non-zero exit status 1.
Traceback (most recent call last)
File "/usr/local/lib/airflow/airflow/models/taskinstance.py", line 930, in _run_raw_tas
result = task_copy.execute(context=context
File "/usr/local/lib/airflow/airflow/operators/python_operator.py", line 113, in execut
return_value = self.execute_callable(
File "/usr/local/lib/airflow/airflow/operators/python_operator.py", line 307, in execute_callabl
string_args_filename)
File "/usr/local/lib/airflow/airflow/operators/python_operator.py", line 319, in _execute_in_subproces
close_fds=True
File "/opt/python3.6/lib/python3.6/subprocess.py", line 356, in check_outpu
**kwargs).stdou
File "/opt/python3.6/lib/python3.6/subprocess.py", line 438, in ru
output=stdout, stderr=stderr
subprocess.CalledProcessError: Command '['/tmp/venvuv3m91vw/bin/python', '/tmp/venvuv3m91vw/script.py', '/tmp/venvuv3m91vw/script.in', '/tmp/venvuv3m91vw/script.out', '/tmp/venvuv3m91vw/string_args.txt']' returned non-zero exit status 1
Значение my_python_virtual_operator_test
это папка, в которой находится мой даг. Похоже, что процесс не может найти, где находится даг при переключении в виртуальную среду.
Подскажите, пожалуйста, как с этим справиться?
Спасибо