微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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日志并将软件包固定到没有冲突的版本;但是,这可能非常困难,因为一旦解决了一个冲突,其他冲突就会出现。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?