【问题标题】:Compatibility issue with google-cloud-language in Cloud composerCloud Composer 中与 google-cloud-language 的兼容性问题
【发布时间】:2020-09-08 14:47:58
【问题描述】:

我在composer-1.8.3-airflow-1.10.3 中使用python3 API google-cloud-language 1.3.0

过去很好,但从过去两周开始报告 ImportError: cannot import name 'aio' from 'grpc.experimental'

我检查了包的文档,看起来google-cloud-language 现在需要grpcio>=1.29.0。然而,根据 Cloud Composer 版本列表,即使是最新版本的 composer,其 PyPI 包 grpcio 仍保留在 1.23.0

我尝试将其版本强制升级到1.29.0,但失败了。

有没有人可以查看这个问题?

【问题讨论】:

    标签: google-cloud-composer google-cloud-language


    【解决方案1】:

    我能够成功地将grpcio 库版本升级到1.31.0。作为第一步,我建议您将 Cloud Composer 实例升级到最新版本 (composer-1.11.3-airflow-1.10.9),因为它应该更稳定并解决了一些问题。

    要在 Cloud Composer 中安装更新版本的 PyPi 包,您可以按照以下步骤或official documentation

    1. 创建requirements.txt 文件并传递包名和版本:
    grpcio>=1.29.0
    
    1. 执行更新命令并提供 ENVIRONMENT_NAME、新创建文件的完整路径和 Composer 环境的 LOCATION(即 europe-west1)。
    gcloud composer environments update <ENVIRONMENT_NAME> \\
    --update-pypi-packages-from-file </PATH/requirements.txt> \\
    --location <LOCATION>
    

    我为确认grpcio 版本已从1.23.0 更改为1.31.0 所采取的步骤如下:

    1. Connect to the GKE cluster 通过在 Cloud Shell 中执行以下命令为您的环境。您可以在环境中的 ENVIRONMENT CONFIGURATION -> GKE cluster 变量中找到 GKE_CLUSTER 值。 GKE_LOCATION 替换为区域名称:
    gcloud container clusters get-credentials ${GKE_CLUSTER} --zone ${GKE_LOCATION}
    
    1. 连接到 GKE 集群中的工作 POD。 NAMESPACE 名称应以:composer-&lt;version&gt;-... 开头,POD_NAME 应以:airflow-worker-...
    kubectl get pods --all-namespaces
    kubectl exec -itn <NAMESPACE_NAME> <POD_NAME>  -- /bin/bash
    
    1. 运行 pip freeze 以查看安装在环境中的所有对应版本的包:
    pip freeze
    
    1. 寻找grpcio==1.31.0 包。

    更新:

    当您尝试安装新软件包时,Composer 尝试创建新构建,但失败了,这可以通过在 Stackdriver Logging 中使用以下高级过滤器在 Cloud Build 的日志中看到:

    resource.type="build" 
    

    问题在于 PyPi 依赖项冲突,每个更新操作都会触发一个重建映像的 Cloud Build 操作。在您使用 Cloud Build 的 Composer 版本中,当看到任何冲突时更新操作失败。在最新版本1.11.3 中,您可以选择是否允许冲突。

    基于此,我将分享两条建议来避免您遇到的问题:

    • 使用更新的 Composer 版本或upgrading 现有版本创建一个新环境。在更新的版本 (>=1.10.0) 中,Composer 在版本 19.0.2 中使用 pip 而不是 9.0.3。因此 pip 本身可能会更好地找到依赖关系。
    • 分析 Cloud Build 日志并将包固定到不冲突的版本;但是,这可能非常困难,因为一旦解决了一个冲突,就会出现另一个冲突。

    【讨论】:

    • 嗨,Ines,TXS 的回答者。我已经尝试过这种方式,但仍然失败并显示在创建新的 Web 服务器映像之前发生错误。您对此消息有任何想法吗?是composer的版本造成的吗?
    • 感谢您的评论并向我提供您所面临的错误消息。我已经用相关信息更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2020-09-03
    • 2019-02-27
    • 1970-01-01
    • 2019-03-26
    • 2021-05-21
    • 1970-01-01
    相关资源
    最近更新 更多