Python库在数据流中不可见

2024-06-26 00:06:31 发布

您现在位置:Python中文网/ 问答频道 /正文

(这不是我的earlier question的副本。我正在使用setup.py尝试一种不同的方法,这与使用requirements.txt的现有方法不同)

我的项目是这样设置的

.
├── __pycache__
├── eventstream-to-bigq-main.py
└── setup.py

setup.py文件如下所示

from setuptools import setup
from setuptools import find_packages

REQUIRED_PACKAGES = [
    "protobuf3-to-dict==0.1.5",
    "protobuf==3.11.2",
]

setup(
    name="eventstream-to-bigq",
    version="1.0",
    install_requires=REQUIRED_PACKAGES,
    packages=find_packages(),
)

最后,我尝试像这样使用这两个库

from google.protobuf.json_format import MessageToDict
from protobuf_to_dict import protobuf_to_dict

def parse_proto(message):
    try:
        dictobj = MessageToDict(message)
        logging.info("google lib", dictobj)
    except Exception as e:
        logging.info("google-lib failed")
        logging.error(e)

    try:
        s = protobuf_to_dict(message)
        logging.info("third party", s)
    except Exception as e:
        logging.info("protobuf-to-dict failed")
        logging.error(e)

即使在这之后,我也会出现以下错误

message: "name 'MessageToDict' is not defined"message: "name 'protobuf_to_dict' is not defined"

我在映像启动时监视日志,可以看到以下日志行

I 2020-01-31T01:28:22.446626952Z 2020/01/31 01:28:22   Building wheel for protobuf3-to-dict (setup.py): finished with status 'done'

I 2020-01-31T01:28:22.443982764Z 2020/01/31 01:28:22   Building wheel for protobuf3-to-dict (setup.py): started

我还可以看到protobuf的类似日志行。我在这里看到的唯一警告是WARNING: You are using pip version 19.3.1; however, version 20.0.2 is available.

即使在所有这些安装之后,我的代码仍然失败

编辑:忘记提到我正在使用此命令运行此命令

python -m eventstream-to-bigq-main \
    --input_topic "projects/project_name/topics/topic_name" \
    --job_name "rawdata-to-bigq-2" \
    --output "gs://bucketname/wordcount/outputs" \
    --runner DataflowRunner \
    --project "project_name"  \
    --region "us-central1" \
    --temp_location "gs://bucketname/tmp/" \
    --staging_location "gs://bucketname/staging" \
    --setup_file ./setup.py \
    --streaming True

Tags: tonamefrompyimportinfomessagepackages
1条回答
网友
1楼 · 发布于 2024-06-26 00:06:31

Dataflow Worker上已经安装了protobuf包,您可以在documentation中签入该包。您需要安装的唯一软件包是protobuf3-to-dict

首先在您的计算机上安装软件包:

pip3 install protobuf3-to-dict

然后,检查您的计算机上安装了哪些软件包:

pip freeze > requirements.txt

此命令创建一个requirements.txt文件,其中列出了计算机上安装的所有软件包。请编辑requirements.txt文件,只保留从PyPI安装的软件包。删除与代码无关的所有包

所以在您的例子中,requirements.txt看起来是这样的:

protobuf3-to-dict==0.1.5

使用以下命令行选项运行管道,该选项将使用文件在远程工作程序上安装其他依赖项:

 requirements_file requirements.txt

我做了一些测试,错误消失了。我希望你觉得以上信息有用

相关问题 更多 >