Managed Airflow(第 3 代) | Managed Airflow(第 2 代) | Managed Airflow(旧版第 1 代)
本页面介绍如何在安装自定义 PyPI 软件包时排查依赖项冲突。
您在 Managed Airflow 中可能会遇到的 PyPI 软件包最常见问题是依赖项冲突。
当您指定要安装的新自定义 PyPI 软件包时,此软件包或其版本可能会导致与环境中其他自定义 PyPI 软件包或预安装的软件包发生依赖项冲突。在这种情况下,环境更新操作将失败并报错。
Cloud Build 和集群内构建错误
如果软件包出现问题,您可以通过两种方式之一获得错误消息,具体取决于环境的部署方式:
Cloud Build。一条错误消息和指向 Cloud Build 日志的链接。例如:
UPDATE operation on this environment failed 25 minutes ago with the following error message: Failed to install PyPI packages. Check the Cloud Build log at ...集群内构建。一条错误消息和构建日志的位置。例如:
UPDATE operation on this environment failed 17 minutes ago with the following error message: Failed to install PyPI packages. Check the in-cluster build logs for details. They can be found in the Environment logs under the build-log-* log name.
查看详细错误消息
如果软件包安装失败,pip 会报告详细错误消息。您可以在构建日志中找到此错误消息。
在 Cloud Build 日志中查找 pip 错误
您可以点击 Cloud Build 错误消息中的链接,也可以查找构建日志:
查找构建日志:
在 Google Cloud 控制台中,前往构建历史记录 页面。
选择失败的构建以查看其日志。
在构建日志中,查找来自
pip的错误消息。例如:ERROR: apache-airflow-backport-providers-google 2021.2.5 has requirement google-cloud-logging<3.0.0,>=2.1.1, but you'll have google-cloud-logging 1.15.0 which is incompatible.
在集群内构建日志中查找 pip 错误
查找构建日志:
在 Google Cloud 控制台中,前往环境 页面。
选择您的环境。
打开日志 标签页。
依次选择所有日志 > Composer 日志 > 构建 > 工作器和调度器映像 。
在严重程度 下拉列表中,选择信息 。
在显示的日志中:
查找
installer.sh错误消息。例如:The command '/bin/sh -c bash installer.sh $COMPOSER_PYTHON_VERSION fail' returned a non-zero code: 1上述信息消息包含详细的
pip错误。例如:apache-airflow-backport-providers-google 2021.2.5 has requirement google-cloud-logging<3.0.0,>=2.1.1, but you have google-cloud-logging 1.15.0.
Python 软件包安装期间发生超时
在最新版本中,pip 实用程序在尝试满足依赖项时更改了其行为。如果无法满足指定的依赖项,pip 会遍历软件包的所有可用版本。
安装软件包时,会发生以下情况:
如果软件包已预安装在您的环境中 并且您指定的 Python 依赖项不需要任何更改,则 软件包将保持原样。
示例:已安装
aiodebug==2.3.0,并且您指定了aiodebug或aiodebug>=2。如果软件包尚未安装在您的环境中,或者它不满足您指定的 Python 依赖项,则
pip会尝试使用满足依赖项的最新版本。如果您未指定版本,则这是软件包的最新版本;如果您指定了限制,则这是满足指定限制的软件包的最新版本。示例:如果您指定了
aiodebug,则将安装最新版本 (2.*.*)。如果您指定了aiodebug<2,则将安装 1.*.*。如果此版本导致与预安装的软件包发生依赖项冲突,
pip会遍历软件包的所有可用版本 ,以尝试满足指定的依赖项。发生这种情况时,构建日志中会显示以下消息:INFO: pip is looking at multiple versions of PYTHON_PACKAGE_NAME to determine which version is compatible with other requirements. This could take a while.在更改之前,
pip会因依赖项冲突而失败,而不会检查其他版本。
遍历所有可用版本可能需要大量时间,并可能导致软件包降级或在 Python 软件包安装期间发生超时。
出于安全原因,Managed Airflow 中的预安装软件包会定期更新到最新版本。因此,当您将环境升级到更高版本的 Managed Airflow 时,也可能会发生超时。
可能的解决方案:
定期更新自定义 Python 依赖项。
使用 PythonVirtualenvOperator 隔离需要冲突软件包的代码段。
与预安装的 PyPI 软件包冲突
您安装的自定义 PyPI 软件包与预安装的软件包之间会发生一些软件包冲突。
您可以在 托管式 Airflow 版本页面上查看 托管式 Airflow 版本的预安装软件包的完整列表。
如需解决此问题,您可以执行以下操作:
安装其他版本的自定义 PyPI 软件包。
安装其他版本的预安装软件包。为此,请使用预装软件包的名称安装自定义 PyPI 软件包并指定所需版本。我们不建议您降级预安装的软件包。
查看更高版本的 Managed Airflow 是否使用不同版本的预安装软件包。在将环境升级到更高版本的 Managed Airflow 之前,您可以 检查是否存在潜在的 PyPI 软件包冲突 。
使用 PythonVirtualenvOperator 隔离需要冲突软件包的代码段。
安装 PyPI 软件包时元数据服务器不可用
如果您的环境使用自定义 pip.conf 文件,
则当您的环境中无法安装新的 PyPI 软件包时,您可能会遇到问题。在与软件包安装错误相关的 Cloud Build 日志中,您可能会看到以下警告消息:
WARNING: Compute Engine Metadata server unavailable on attempt 3 of 3. Reason:
timed out
WARNING: Authentication failed using Compute Engine authentication due to
unavailable metadata server.
此问题是由不允许访问
默认软件包索引
在https://pypi.org/simple处的pip.conf文件引起的。例如,如果您的 pip.conf 文件仅允许从自定义 Artifact Registry 代码库安装软件包(因为重新定义了 index-url 参数),则无法从默认软件包索引安装软件包。
如需解决此问题,请确保将 https://pypi.org/simple 软件包索引添加到 pip.conf 文件中。例如,如果您的主要软件包索引
是在 index-url 参数中定义的,请在 https://pypi.org/simple
索引在 extra-index-url 参数中添加。