Cloud Dataflow Python:无法安装软件包:无法安装工作流程

时间:2018-02-09 16:58:49

标签: python google-cloud-dataflow apache-beam

我正在尝试在DataflowRunner上测试我的数据流管道。我的代码总是在1小时1分钟停留并说:数据流似乎被卡住了。在挖掘Dataflow堆栈驱动程序的堆栈跟踪时,我遇到了错误data.table。我看到其他堆栈溢出消息说当pip包不兼容时可能会导致这种情况。这导致我的工作人员启动总是失败。

这是我目前的setup.py。有人可以帮我理解我所缺少的东西。工作编号为2018-02-09_08_22_34-6196858167817670597。

setup.py

Failed to install packages: failed to install workflow: exit status 1

4 个答案:

答案 0 :(得分:2)

在所需的setup.py软件包中包括“工作流”软件包。包含错误后即可解决。

from setuptools import setup, find_packages


requires = [
            'numpy==1.14.0',
            'google-cloud-storage==1.7.0',
            'pandas==0.22.0',
            'sqlalchemy-vertica[pyodbc,turbodbc,vertica-python]==0.2.5',
            'sqlalchemy==1.2.2',
            'apache_beam[gcp]==2.2.0',
            'google-cloud-dataflow==2.2.0',
            'workflow' # Include this line
            ]

setup(
    name="dataflow_pipeline_dependencies",
    version="1.0.0",
    description="Beam pipeline for flattening ism data",
    packages=find_packages(),
    install_requires=requires
)

答案 1 :(得分:1)

所以我发现在这种情况下工作流不是pypi包,而是实际上由Dataflow创建的包含源代码的.tar的名称。 Dataflow将压缩您的源代码并在暂存环境中创建workflow.tar文件,然后它将尝试运行pip install workflow.tar。如果此安装出现任何问题,则无法将软件包安装到工作程序上。

我的问题通过以下几点解决:1)我在我的要求中添加了六个== 1.10.0,因为我发现:工作流程失败。原因:(35af2d4d3e5569e4):数据流似乎卡住了,最新版本的六个版本存在问题。 2)我意识到sqlalchemy-vertica和sqlalchemy不同步并且存在依赖版本的问题。因此,我删除了对两者的需求,并找到了一个不同的vertica客户端。

答案 2 :(得分:0)

我处理大量的Python软件包以及如何管理每个软件包的所有版本,不兼容性和需求都不是天才。

但是,我可以阅读错误消息。

在您的情况下,消息显示“无法安装工作流程”。快速搜索谷歌后,我发现“workflow”实际上是一个Python包。

所以错误只是抱怨你没有安装workflow并且尝试这样做失败了。

解决此问题

  • 从此PyPI链接安装workflow。这是Google向我展示的最新版本。

  • 执行常规pip install workflow

任何一种方法都应该安装所需的包。 安装完成后,特定错误消息应该消失。

我希望这个答案能帮到你!

答案 3 :(得分:0)

您的行驶里程可能会有所不同,但对我而言,以上所有方法均无效(Python 3.7)。

相反,解决方案似乎是将我的依赖项保存在requirements.txt文件中,然后将所有其他内容保存在setup.py中。重要的是,我requirements.txt行加载到install_requires属性中。无论采用哪种方式,无论是否使用workflow,都使用install_requires似乎会导致我遇到此错误。

相反,我的setup.py根本没有指定依赖项。运行管道时,我同时给出了--requirements_file--setup_file参数。那为我解决了这个问题,并且管道的构建和启动方式有明显的不同,因为依赖项以这种方式存储在登台位置中,而之前则没有。

例如:

setup.py

import setuptools

setuptools.setup(
    name='my_pipeline',
    version='0.0.0',
    packages=setuptools.find_packages()
)

requirements.txt

google-cloud-bigquery==1.24.0
google-cloud-storage==1.25.0
jinja2==2.11.1
[...etc...]

run_pipeline.sh

#!/usr/bin/env bash

[...code to set vars...]

if [ "${1}" = "dataflow" ]; then
  RUNNER="--runner DataflowRunner"
fi

python "${PIPELINE_FILE}" \
    --output "${OUTPUT}" \
    --project myproject \
    --region us-west1 \
    --temp_location "${TEMP}" \
    --staging_location "${STAGING}" \
    --no_use_public_ips \
    --requirements_file requirements.txt \
    --setup_file "./setup.py" \
    ${RUNNER}