Import 气流DAG从何处获得其依赖项?

Import 气流DAG从何处获得其依赖项?,import,dependencies,airflow,Import,Dependencies,Airflow,我正在努力用气流来完成一些非常简单的任务 对于上下文,我使用docker compose运行带有气流和Postgres的docker容器。() 我正在尝试测试我们的一个室内图书馆与气流的集成。我用来快速测试的不是很干净的方法是将docker exec放入airflow容器中,然后pip安装适当的库(通过主机到容器共享,docker卷处于只读模式) 所有的东西都是用pip正确安装的,我可以在运行伪Python脚本时使用我的库 然而,当我将相同的逻辑集成到DAG python文件中时,我得到了错误“

我正在努力用气流来完成一些非常简单的任务

对于上下文,我使用docker compose运行带有气流和Postgres的docker容器。()

我正在尝试测试我们的一个室内图书馆与气流的集成。我用来快速测试的不是很干净的方法是将docker exec放入airflow容器中,然后pip安装适当的库(通过主机到容器共享,docker卷处于只读模式)

所有的东西都是用pip正确安装的,我可以在运行伪Python脚本时使用我的库

然而,当我将相同的逻辑集成到DAG python文件中时,我得到了错误“断开的DAG,没有名为inhouse_lib的模块”

起初,我认为Airflow是在一个特定的pip目录中挑选与Python版本相关的依赖项,并且我将库安装在另一个pip目录中

但是对于所有的Python二进制文件,它们都使用Python 3.7

对于我所有的pip二进制文件(pip、pip3、pip3.7),在编写pip列表时,我可以找到我的内部库

我不明白我应该如何部署我的库,以便气流可以拾取它们。任何见解都将不胜感激

谢谢你的帮助

编辑 为了澄清我试图做什么,下面是一些细节。在我的DAG中,我想使用一个自定义Python库(我们称之为尚未实现的myLib功能)。一旦实现,我想将此最新版本的myLib部署到airflow容器中

我用一个卷更新了docker-compose.yml,该卷将我的主机目录映射到主目录上的myLib

# Go in the container
docker exec -it <airflow docker container ID> bash

# Install myLib to Python environment
pip install myLib

# Check the installation
pip list | grep myLib # output myLib

# Check the import in Python REPL
python
import myLib # No Python error
#进入容器
docker exec-it bash
#将myLib安装到Python环境
pip安装myLib
#检查安装情况
pip列表| grep myLib#输出myLib
#检查Python REPL中的导入
python
导入myLib#无Python错误
相同的导入在我的DAG中不起作用。检查容器日志时,我出现以下错误:

[2019-08-30 15:14:30,499] {{__init__.py:51}} INFO - Using executor LocalExecutor
[2019-08-30 15:14:30,894] {{dagbag.py:90}} INFO - Filling up the DagBag from /usr/local/airflow/dags
[2019-08-30 15:14:30,897] {{dagbag.py:205}} ERROR - Failed to import: /usr/local/airflow/dags/mydag.py
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/airflow/models/dagbag.py", line 202, in process_file
    m = imp.load_source(mod_name, filepath)
  File "/usr/local/lib/python3.7/imp.py", line 171, in load_source
    module = _load(spec)
  File "<frozen importlib._bootstrap>", line 696, in _load
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/usr/local/airflow/dags/mydag.py", line 7, in <module>
    import myLib
ModuleNotFoundError: No module named 'myLib'
[2019-08-30 15:14:31 +0000] [167] [INFO] Handling signal: ttou
[2019-08-30 15:14:31 +0000] [11446] [INFO] Worker exiting (pid: 11446)

[2019-08-30 15:14:30499]{{{{{uuuu init{uuuuuu.py:51}}}信息-使用executor LocalExecutor
[2019-08-30 15:14:30894]{{dagbag.py:90}}信息-从/usr/local/aiffair/dags填充dagbag
[2019-08-30 15:14:30897]{{dagbag.py:205}错误-导入失败:/usr/local/aiffair/dags/mydag.py
回溯(最近一次呼叫最后一次):
文件“/usr/local/lib/python3.7/site packages/afflow/models/dagbag.py”,第202行,进程文件中
m=imp.load\u源(模块名称、文件路径)
文件“/usr/local/lib/python3.7/imp.py”,第171行,在load_source中
模块=_负载(规格)
文件“”,第696行,正在加载
文件“”,第677行,在\u加载\u解锁
exec_模块中第728行的文件“”
文件“”,第219行,在“调用”中,删除了“帧”
文件“/usr/local/afflow/dags/mydag.py”,第7行,在
导入myLib
ModuleNotFoundError:没有名为“myLib”的模块
[2019-08-30 15:14:31+0000][167][INFO]处理信号:ttou
[2019-08-30 15:14:31+0000][11446][INFO]工人退出(pid:11446)

对于每个DAG,您需要在运行前对其进行测试

您可以使用以下cli命令检查环境和代码逻辑:

airflow list dags
airflow test [dag_name] [task_name] [date]
根据您的问题,您应该在环境依赖中面临问题。您可以通过docker容器中的DAG列表来检查。要解决您的任务,我们有两种方法: 1.在afflow.cfg文件中设置dags文件夹,将模块文件放入dags文件夹中

  • 检查气流环境中的python路径,确保您可以访问模块
  • ========================== 更新1: 为了检查模块是否正确安装,可以使用以下命令:

  • docker images| grep[你的图像名称]
  • 查找容器iD
  • docker运行[container id]python
  • 在docker python环境中检查您的模型是否正确安装 需要通过pip进行doubleck安装
  • 更新2: 为了检查您的依赖性,您可以: 编写一个简单的dag,并使用气流测试[dag_name][dag_task_name][date]查看工作是否正常

    据我所知,您可以尝试从零开始构建气流图像,这可能会很好地工作。docker容器可能会假设一些环境和用户实例

    若您希望继续使用网络容器,可以尝试在登录并安装python库时切换到相同的use id

    docker exec-u[user\u name您可以找到dockerfile][container\u id]命令


    不要忘记提交对新映像ID的每个更改,并从新映像ID加载容器,否则每次运行每个DAG时,您可能会丢失更改,您需要在运行之前对其进行测试

    您可以使用以下cli命令检查环境和代码逻辑:

    airflow list dags
    airflow test [dag_name] [task_name] [date]
    
    根据您的问题,您应该在环境依赖中面临问题。您可以通过docker容器中的DAG列表来检查。要解决您的任务,我们有两种方法: 1.在afflow.cfg文件中设置dags文件夹,将模块文件放入dags文件夹中

  • 检查气流环境中的python路径,确保您可以访问模块
  • ========================== 更新1: 为了检查模块是否正确安装,可以使用以下命令:

  • docker images| grep[你的图像名称]
  • 查找容器iD
  • docker运行[container id]python
  • 在docker python环境中检查您的模型是否正确安装 需要通过pip进行doubleck安装
  • 更新2: 为了检查您的依赖性,您可以: 编写一个简单的dag,并使用气流测试[dag_name][dag_task_name][date]查看工作是否正常

    据我所知,您可以尝试从零开始构建气流图像,这可能会很好地工作。docker容器可能会假设一些环境和用户实例

    如果你是公关