python 获取异常“没有名为”airflow.providers. sftp“的模块”

rvpgvaaj  于 2022-12-17  发布在  Python
关注(0)|答案(4)|浏览(109)

我正在尝试从SFTP复制文件到谷歌云存储。

  • 编写器版本= 1.16.12
  • 气流版本= 1.10.15。

当执行得到异常No module named 'airflow.providers.sftp'。非常感谢如果有人能给予指针。
代码片段为:

import os
import airflow
from airflow import DAG
from airflow import models
from airflow.operators import python_operator
from airflow.providers.google.cloud.transfers.sftp_to_gcs import SFTPToGCSOperator
from airflow.utils.dates import days_ago

with models.DAG("test_ssh_to_gcs", start_date=days_ago(1), schedule_interval=None) as dag:

    copy_file_from_ssh_to_gcs = SFTPToGCSOperator(
        task_id="file-copy-ssh-to-gcs",
        source_path="/ ",
        destination_bucket='test_sftp_to_gcs',
        destination_path="test/test.csv",
        gcp_conn_id="google_cloud_default",
        sftp_conn_id="sftp_test",
    )

copy_file_from_ssh_to_gcs
1l5u6lss

1l5u6lss1#

首先,您是否尝试过将packagepip install apache-airflow-providers-sftp一起安装?
还要注意你所引用的文档版本。在Airflow 2. 0中,一些包已经是moved了。

lxkprmvk

lxkprmvk2#

您会得到错误,因为SFTPToGCSOperator在通风柜下使用airflow.providers.sftp.operators.SFTPOperator,这存在于气流〉= 2.0.0中。
坏消息是需要升级您的气流版本以使用airflow.providers.google.cloud.transfers.sftp_to_gcs.SFTPToGCSOperator
如果您不想/无法升级气流,可以创建一个DAG链接两个运算符:
| 操作员|气流1.x导入|
| - ------|- ------|
| SFTP操作员(使用“operation= get”将文件下载到本地)|from airflow.contrib.operators.sftp_operator import SFTPOperator|
| 上传文件到Google云存储|from airflow.contrib.operators.file_to_gcs import FileToGoogleCloudStorageOperator|
这应该可以达到目的:

LOCALFILE = '/tmp/kk'

with models.DAG("test_ssh_to_gcs", start_date=days_ago(1), schedule_interval=None) as dag:

   download_sftp = SFTPOperator(
      task_id = 'part1_sftp_download_to_local',
      ssh_conn_id="sftp_test",
      local_file=LOCALFILE,
      remote_file='',
      operation='get')

   gcp_upload = FileToGoogleCloudStorageOperator(
      task_id='part2_upload_to_gcs',
      bucket='test_sftp_to_gcs',
      src=LOCALFILE,
      dst="test/test.csv",
      google_cloud_storage_conn_id="google_cloud_default" # configured in Airflow
   ) 

   sftp_download >> gcp_upload
vulvrdjw

vulvrdjw3#

使用airflow 1.10,您可以安装backported packages
对于您的情况,需要将以下内容添加到您的Composer集群:
1-apache-气流-backport-providers-谷歌
2-Apache气流后端端口提供程序-sftp
3-Apache气流后端端口提供程序-ssh

gojuced7

gojuced74#

通过pip安装依赖项。

pip install apache-airflow-providers-sftp

相关问题