当前位置: 首页 > 知识库问答 >
问题:

在Google数据流中使用setup.py时调用了ProcessError

慕逸仙
2023-03-14

使用安装程序时出现以下错误。py用于在我的数据流工作程序上安装依赖项:

CalledProcessError                        Traceback (most recent call last)
~/apache-beam-2.27.0/lib/python3.7/site-packages/apache_beam/utils/processes.py in check_output(*args, **kwargs)
     90     try:
---> 91       out = subprocess.check_output(*args, **kwargs)
     92     except OSError:

/opt/conda/lib/python3.7/subprocess.py in check_output(timeout, *popenargs, **kwargs)
    410     return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
--> 411                **kwargs).stdout
    412 

/opt/conda/lib/python3.7/subprocess.py in run(input, capture_output, timeout, check, *popenargs, **kwargs)
    511             raise CalledProcessError(retcode, process.args,
--> 512                                      output=stdout, stderr=stderr)
    513     return CompletedProcess(process.args, retcode, stdout, stderr)

CalledProcessError: Command '['/root/apache-beam-2.27.0/bin/python', 'setup.py', 'sdist', '--dist-dir', '/tmp/tmpcljk596r']' returned non-zero exit status 1.

我的Setup.py文件正是Apache Beam提出的,我想安装2个python模块和一个apt-get:

CUSTOM_COMMANDS = [
    ['apt-get', 'update'],
    ['apt-get', '--assume-yes', 'install', 'poppler-utils']
]

REQUIRED_PACKAGES = ['pdf2image', 'poppler-utils']

这是一个非常痛苦的错误,因为在我看来,我正在使用设置。py选项与使用apt-get-on-my-workers安装依赖项的方式完全相同。

像往常一样,使用DirectRunner非常有效:)

我的配置:

    < Li > Python 3 . 7 . 9上的Apache Beam 2 . 27 . 0 < Li > GCP数据流笔记本 < li >(在笔记本外运行数据流时出现同样的错误)

感谢您的帮助

此致敬意

杰罗姆

共有1个答案

谢裕
2023-03-14

我最近经历了类似的错误...花了很长时间才修好。我不能代表所有平台或您的特定setup.py,但我可以分享我如何修复Windows上的类似问题,希望这可以帮助您。

在 apache 波束源中,它使用 Python 的子处理模块(您会看到被叫处理器错误源自该模块)运行 setup 命令。在 Windows 上,它在调用check_output时强制参数 shell=True,这意味着它在特定于平台的外壳(即通常在窗口上的 cmd.exe)中运行命令。

作为第一步,通过在shell中手动运行它来验证您看到的抛出CalledProcessException的命令实际上并没有抛出错误。在我的例子中,命令(Pythonsetup.py研究…)在手动运行时按预期工作。

然后,如果您在Windows上,请确保powershell/cmd上的所有自动运行命令都按预期运行并且不会抛出错误。如果您不在windows上,我认为您应该验证您的束代码是否正在使用shell=True,如果是这样,请确保您的shell的自动运行脚本正常工作。

在我的例子中,Beam运行的Python命令在手动运行时运行良好。但是,当在shell=True的子进程中执行时,我的shell中一个中断的自动运行命令导致beam从子进程接收错误代码,并认为Python命令失败了。

泰勒

 类似资料:
  • 我正在开发一个物联网应用程序,需要从PubSub主题读取流数据。我想使用Google云数据流SDK读取这些数据。我正在使用Java 1.8 我正在使用谷歌云平台的试用版。当我使用PubSubIO时。Read方法读取流数据时,我在日志文件中发现错误,我的项目没有足够的CPU配额来运行应用程序。 所以我想使用谷歌云数据流SDK读取流数据。 请有人告诉我在哪里可以找到使用Google Cloud Dat

  • 问题内容: 我已经为此苦苦挣扎了几个小时,即使在阅读了Stack上的几个示例后,我也无法使它正常工作。我是JS新手,这无济于事。 我正在尝试从Google Geocoder API检索有关地址的信息,然后将该对象传递给另一个函数。根据我的阅读,我了解到我用来检索信息的函数是异步的,因此我需要使用一个回调函数来读取它。但是,当我尝试执行此操作时,控制台仍然返回“ undefined”。我知道该信息来

  • 我们的公司策略要求启用策略约束“compute.requireshieldevm”。但是,运行云数据流作业时,无法创建工作进程,错误如下: 约束/计算。项目项目违反了RequireshieldVM/************。启动磁盘的“初始化”参数。source_image'字段指定非屏蔽映像:projects/dataflow service producer prod/global/image

  • 问题内容: 我想为MySortedSet调用一个构造函数,该构造函数将Comparator c作为参数。我该如何修改呢? 问题答案: 如果要传递其他捕获的值作为参数,则不能使用方法引用。您将不得不使用lambda表达式来代替: =>

  • 我们目前正在使用Google的云数据流SDK(1.6.0)在GCP中运行数据流作业,但是,我们正在考虑迁移到Apache Beam SDK(0.1.0)。我们仍将使用数据流服务在GCP中运行我们的作业。有没有人经历过这一转变并提出了建议?这里是否存在任何兼容性问题?GCP是否鼓励这种做法?

  • 我正在编写一个Flink流程序,其中我需要使用一些静态数据集(信息库,IB)来丰富用户事件的数据流。 对于例如。假设我们有一个买家的静态数据集,并且我们有一个事件的clickstream,对于每个事件,我们要添加一个布尔标志,指示事件的实施者是否是买家。 另一个选择可以是使用托管操作员状态来存储购买者设置,但是我如何保持按用户id分配的该状态,以避免在单个事件查找中使用网络I/O呢?在内存状态后端