You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

首次使用GCP:通过BashOperator在Compute Engine执行Python脚本遇文件缺失问题

问题:GCP Composer通过BashOperator在Compute Engine执行Python脚本找不到文件?

我首次使用GCP,尝试通过BashOperator在Compute Engine上执行Python脚本。我将Python脚本存储在Composer所在的存储桶中,但运行BashOperator时出现文件未找到错误。

相关代码

bash_task = bash_operator.BashOperator(
    task_id='script_execution',
    bash_command='gcloud compute ssh --project '+PROJECT_ID+ ' --zone '+REGION+' '+GCE_INSTANCE+ '--command python3 script.py',
    dag=dag)

报错信息

python3: can't open file '/home/airflow/gcs/dags/script.py': [Errno 2] No such file or directory


解决方案

核心问题是:通过gcloud compute ssh执行命令时,是在目标Compute Engine实例的本地环境中查找script.py,但你把文件存在了Composer的存储桶里,GCE实例无法直接访问这个跨环境路径。

以下是两种可行的处理方案:

  • 方案一:将脚本复制到GCE实例本地后执行
    先通过gsutil cp把Composer存储桶里的脚本复制到GCE实例的本地目录,再执行脚本。修改后的BashOperator代码如下:

    bash_task = bash_operator.BashOperator(
        task_id='script_execution',
        bash_command='gcloud compute ssh --project '+PROJECT_ID+ ' --zone '+REGION+' '+GCE_INSTANCE+ ' --command "gsutil cp gs://[你的Composer存储桶完整路径]/script.py ~/ && python3 ~/script.py"',
        dag=dag)
    

    注意替换[你的Composer存储桶完整路径]为实际地址,比如your-composer-bucket-name/dags/script.py。

  • 方案二:直接从存储桶读取脚本内容并执行
    无需下载文件到GCE本地,通过gsutil cat将脚本内容传递给Python执行,适合小型脚本:

    bash_task = bash_operator.BashOperator(
        task_id='script_execution',
        bash_command='gcloud compute ssh --project '+PROJECT_ID+ ' --zone '+REGION+' '+GCE_INSTANCE+ ' --command "gsutil cat gs://[你的Composer存储桶完整路径]/script.py | python3"',
        dag=dag)
    

额外注意:要确保GCE实例关联的服务账号拥有访问Composer存储桶的权限(至少需要storage.objects.get权限),否则会触发权限不足的错误。


内容的提问来源于stack exchange,提问作者avinash reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:40:43