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