Cloud Composer中的google-cloud-language的兼容性问题

问题描述

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

曾经很好,但是最近两周它报告了 ImportError:无法从“ grpc.experimental”导入名称“ aio”

我已经检查了软件包的文档,看来google-cloud-language现在需要grpcio>=1.29.0。但是,根据Cloud Composer版本列表,即使对于最新版本的Composer,其PyPI程序包grpcio仍位于1.23.0

我试图将其版本强制提高到1.29.0,但失败了。

有人可以检查这个问题吗?

解决方法

我能够成功地将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环境的位置(即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而采取的步骤如下:

    通过在Cloud Shell中执行以下命令来针对您的环境
  1. Connect to the GKE cluster。您可以在环境中的GKE_CLUSTER-> ENVIRONMENT CONFIGURATION变量中找到GKE cluster值。 GKE_LOCATION替换为区域名称:
gcloud container clusters get-credentials ${GKE_CLUSTER} --zone ${GKE_LOCATION}
  1. 连接到GKE集群中的辅助POD。 NAMESPACE名称应以composer-<version>-...开头,而POD_NAME应以airflow-worker-...
kubectl get pods --all-namespaces
kubectl exec -itn <NAMESPACE_NAME> <POD_NAME>  -- /bin/bash
  1. 运行pip Frozen以查看具有相应版本的环境中安装的所有软件包:
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日志并将软件包固定到没有冲突的版本;但是,这可能非常困难,因为一旦解决了一个冲突,其他冲突就会出现。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...