Python 谷歌云数据流可以';t导入&x27;google.cloud.datastore';

Python 谷歌云数据流可以';t导入&x27;google.cloud.datastore';,python,google-app-engine,google-cloud-dataflow,Python,Google App Engine,Google Cloud Dataflow,这是我的进口代码 from __future__ import absolute_import import datetime import json import logging import re import apache_beam as beam from apache_beam import combiners from apache_beam.io.gcp.bigquery import parse_table_schema_from_json from apache_beam.

这是我的进口代码

from __future__ import absolute_import

import datetime
import json
import logging
import re

import apache_beam as beam
from apache_beam import combiners
from apache_beam.io.gcp.bigquery import parse_table_schema_from_json
from apache_beam.io.gcp.datastore.v1.datastoreio import ReadFromDatastore
from apache_beam.pvalue import AsDict
from apache_beam.pvalue import AsSingleton
from apache_beam.options.pipeline_options import PipelineOptions

from google.cloud.proto.datastore.v1 import query_pb2
from google.cloud import datastore
from googledatastore import helper as datastore_helper, PropertyFilter

# datastore entities that we need to perform the mapping computations
#from models import UserPlan, UploadIntervalCount, RollingMonthlyCount
这就是我的requirements.txt文件的样子

$ cat requirements.txt
Flask==0.12.2
apache-beam[gcp]==2.1.1
gunicorn==19.7.1
google-cloud-dataflow==2.1.1
six==1.10.0
google-cloud-datastore==1.3.0
google-cloud
这些都在
/lib
目录中。
/lib
目录具有以下内容

$ ls -1 lib/google/cloud
__init__.py
_helpers.py
_helpers.pyc
_http.py
_http.pyc
_testing.py
_testing.pyc
bigquery
bigtable
client.py
client.pyc
datastore
dns
environment_vars.py
environment_vars.pyc
error_reporting
exceptions.py
exceptions.pyc
gapic
iam.py
iam.pyc
language
language_v1
language_v1beta2
logging
monitoring
obselete.py
obselete.pyc
operation.py
operation.pyc
proto
pubsub
resource_manager
runtimeconfig
spanner
speech
speech_v1
storage
translate.py
translate.pyc
translate_v2
videointelligence.py
videointelligence.pyc
videointelligence_v1beta1
vision
vision_v1
请注意,
google.cloud.datastore
google.cloud.proto
都存在于
/lib
文件夹中。但是,此导入行工作正常

来自google.cloud.proto.datastore.v1导入查询\u pb2

但这次失败了

从google.cloud导入数据存储

这是一个例外(取自谷歌云数据流控制台在线)

(9b49615f4d91c1fb):回溯(最近一次呼叫最后一次):
文件“/usr/local/lib/python2.7/dist-packages/dataflow\u-worker/batchworker.py”,第582行,在do\u-work中
工作执行器。执行器()
文件“/usr/local/lib/python2.7/dist-packages/dataflow\u-worker/executor.py”,执行中第166行
作品:开始()
文件“apache_-beam/runners/worker/operations.py”,第294行,在apache_-beam.runners.worker.operations.DoOperation.start(apache_-beam/runners/worker/operations.c:10607)中
def启动(自):
文件“apache_-beam/runners/worker/operations.py”,第295行,在apache_-beam.runners.worker.operations.DoOperation.start(apache_-beam/runners/worker/operations.c:10501)中
使用self.scoped_start_状态:
文件“apache_beam/runners/worker/operations.py”,第300行,在apache_beam.runners.worker.operations.DoOperation.start(apache_beam/runners/worker/operations.c:9702)中
pickler.load(自规范序列化)
文件“/usr/local/lib/python2.7/dist packages/apache_beam/internal/pickler.py”,第225行,装入
回灌量
文件“/usr/local/lib/python2.7/dist-packages/dill/dill.py”,第277行,装入
返回加载(文件)
文件“/usr/local/lib/python2.7/dist-packages/dill/dill.py”,第266行,已加载
obj=pik.load()
文件“/usr/lib/python2.7/pickle.py”,第858行,已加载
调度[键](自身)
文件“/usr/lib/python2.7/pickle.py”,第1133行,在load\u reduce中
值=func(*args)
文件“/usr/local/lib/python2.7/dist packages/dill/dill.py”,第767行,在导入模块中
返回getattr(uuu导入_uuu(模块,无,无,[obj]),obj)
文件“/usr/local/lib/python2.7/dist packages/dataflow_pipeline/counters_pipeline.py”,第25行,在
从google.cloud导入数据存储
ImportError:没有名为datastore的模块

为什么它找不到包裹

外部依赖项必须安装在
setup.py
中,并且该文件应在管道参数中指定为
--setup\u file
。 在
setup.py
中,您可以使用自定义命令安装软件包

pip install google-cloud-datastore==1.3.0
或者将您的软件包添加到
必需的\u软件包中

REQUIRED_PACKAGES = ["google-cloud-datastore==1.3.0"]

需要在
setup.py
中指定它的原因是,在执行数据流期间,不使用
appengine\u config
中的库。appengine在这里仅充当调度器,它仅将作业部署到数据流引擎。然后,DataFlow创建一些执行管道的工作机-这些工作机没有通过任何方式连接到应用程序引擎。DataFlow workers必须拥有管道执行所需的每个包,这就是为什么需要在
setup.py
文件中指定所需包的原因。数据流工作人员使用此文件“自行设置”。

外部依赖项必须安装在
setup.py
中,并且应在管道参数中指定此文件。google.cloud是否为外部依赖项?它与安装在/lib目录中的google.cloud.proto.v1.datastore依赖项有什么不同,我可以轻松访问该目录?不管怎样,我会试试看。我只需要将
googlecloud
添加到setup.py内的
REQUIRED_PACKAGES
列表中?嘿@MarcinZablocki,你的答案是正确的,非常感谢!我仍然很困惑,为什么有些东西可以放在/lib目录中并链接到appengine_config.py文件中,而其他东西必须放在setup.py文件中。也许你可以扩展一下,把它写成一个完整的答案?你看到我的答案了吗?@MarcinZablocki刚刚看到了,谢谢!
REQUIRED_PACKAGES = ["google-cloud-datastore==1.3.0"]