【问题标题】:Airflow PythonVirtualenvOperator ModuleNotFoundError: No module named 'dags'气流 PythonVirtualenvOperator ModuleNotFoundError:没有名为“dags”的模块
【发布时间】:2022-01-18 22:03:21
【问题描述】:

我的项目的文件夹结构类似于:

dags/
  git-dagrepo/
    my_module.py
  my_dag.py

我正在使用 PythonVirtualenvOperator 并尝试将 my_module.py 导入 my_dag.py 但它似乎找不到它。我不断收到 ModuleNotFoundError。我尝试只使用模块名称,也尝试使用整个路径,但我仍然得到同样的错误。

这是我在 my_dag.py 中 PythonVirtualenvOperator 使用的 func 中的代码

import importlib
mod = importlib.import_module("dags.git-dagrepo.my_module")
mod.main()

【问题讨论】:

    标签: python airflow virtualenv virtual-environment


    【解决方案1】:

    我也有几乎相同的问题。这个帖子也讨论了这个问题:Where is the root of the venv created by PythonVirtualenvOperator located?

    似乎正在发生的事情是 virtualenv 操作员创建了一个完全隔离的环境,其中 dags 文件夹不在 PYTHONPATH 中。 但是,我无法使上述线程中的解决方案起作用。对我有用的唯一方法是硬编码 dag 中的路径,基本上是这样的:

    def my_task():
        import sys
        sys.path.insert(0, <path/to/dags/folder>)
    
        ...
    
    virtualenv_task = PythonVirtualenvOperator(
        task_id="virtualenv_python",
        python_callable=my_task,
        requirements=[.....],
        system_site_packages=False,
    )
    

    这感觉很hacky,所以我也很想知道是否有适当的解决方法。

    【讨论】:

    • 谢谢艾希莎。我最终做了同样的事情。希望有一个更“清洁”的解决方案。
    猜你喜欢
    • 2020-11-30
    • 1970-01-01
    • 2019-03-28
    • 2021-03-24
    • 2021-03-07
    • 2022-06-10
    • 2022-01-07
    • 2021-02-27
    • 2017-12-14
    相关资源
    最近更新 更多