为 dev_appserver 导入 python 模块的正确方法是什么?

2024-04-21

Intent

我正在为 App Engine 创建一个 CRUD 应用程序,其中用户通过 OAuth 进行身份验证,服务器将其访问和刷新令牌存储在数据存储区中。我正在进行本地测试dev_appserver并陷入进退两难的境地:

  • The python37 runtime cannot import the ndb module for Datastore and the python27 runtime cannot import the google.auth module.

问题陈述

Python37

In the python37 runtime, my requirements.txt file is detected and all dependencies are installed properly. However, it appears that this runtime does not currently have native support for the ndb module in order to make calls the Datastore API.

    from google.appengine.ext import ndb
ModuleNotFoundError: No module named 'google.appengine'

One way to solve my problem would be to manually install the ndb package, however I don't believe that it open-source at this point in time.

我很可能会使用google-api-python-client与数据存储交互。不过,我仍然有兴趣解决下面概述的问题,以便更好地理解 python 模块在 App Engine 中的工作方式。

Python27

在 python27 运行时中,requirements.txt 被忽略。我的解决方法是包含所有依赖项源代码的最新版本。我通过填充一个名为的目录来做到这一点dependencies与源,然后添加符号链接到根模块。 (这也是学习如何导入 python 模块的一个很好的练习)

项目结构

目录

.
├── api.py
├── app
│   ├── build
│   ├── config
│   ├── dist
│   ├── index.html
│   ├── node_modules
│   ├── package.json
│   ├── package-lock.json
│   ├── src
│   └── static
├── app.yaml
├── dependencies
│   ├── click-7.0
│   ├── flask-1.0.2
│   ├── google-auth-library-python-1.6.3
│   ├── google-auth-library-python-oauthlib-0.3.0
│   ├── itsdangerous-1.1.0
│   ├── jinja-2.10.1
│   └── markupsafe-1.1.1
├── libs
│   ├── click -> ../dependencies/click-7.0/click/
│   ├── flask -> ../dependencies/flask-1.0.2/flask/
│   ├── google -> ../dependencies/google-auth-library-python-1.6.3/google/
│   ├── google_auth_oauthlib -> ../dependencies/google-auth-library-python-oauthlib-0.3.0/google_auth_oauthlib/
│   ├── __init__.py
│   ├── itsdangerous -> ../dependencies/itsdangerous-1.1.0/src/itsdangerous/
│   ├── jinja2 -> ../dependencies/jinja-2.10.1/jinja2/
│   └── markupsafe -> ../dependencies/markupsafe-1.1.1/src/markupsafe/
├── requirements.txt
└── spa.py

Python代码

在我的服务器文件中,spa.py and api.py,我包括libs在python路径中如下:

import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), 'libs'))

这适用于导入语句,例如

import google_auth_oauthlib.flow  # works

and

from flask import Flask, request, session, redirect  # works

但它失败了

import google.auth  # does not work

有这个特例

Traceback (most recent call last):
  File "<HOME>/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "<HOME>/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "<HOME>/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject
    obj = __import__(path[0])
  File "<HOME>/vue-scheduler/api.py", line 6, in <module>
    import google.auth
  File "<HOME>/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/runtime/sandbox.py", line 1149, in load_module
    raise ImportError('No module named %s' % fullname)
ImportError: No module named google.auth

我相信我已经正确设置了 python 导入的所有内容auth子模块。这__init__.py文件存在并且should让 python 递归遍历嵌套的模块目录。然而它无法找到auth.


对于第一代 GAE 标准环境 (Python 2.7) 应用程序处理依赖项与常规 Python 应用程序略有不同。尽量不要发挥创意,因为如果遇到麻烦,获得帮助会更加困难。

对于 GAE 提供的第 3 方内置库中包含的库,您可以只需要求他们 https://cloud.google.com/appengine/docs/standard/python/tools/using-libraries-python-27#using_a_built-in_third-party_library_bundled_with_the_runtime在你的app.yaml file.

GAE 未提供的第 3 方库(或您有意使用自己的版本/副本的库)必须是复制/出售 https://cloud.google.com/appengine/docs/standard/python/tools/using-libraries-python-27#copying_a_third-party_library到您的应用程序中。

仅选择一种方法,尝试对同一个库执行这两种方法也可能会导致麻烦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 dev_appserver 导入 python 模块的正确方法是什么? 的相关文章

  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • 如何使用 opencv.omnidir 模块对鱼眼图像进行去扭曲

    我正在尝试使用全向模块 http docs opencv org trunk db dd2 namespacecv 1 1omnidir html用于对鱼眼图像进行扭曲处理Python 我正在尝试适应这一点C 教程 http docs op
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • 如何在 Python 中解析和比较 ISO 8601 持续时间? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 Python v2 库 它允许我解析和比较 ISO 8601 持续时间may处于不同单
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • Numpy - 根据表示一维的坐标向量的条件替换数组中的值

    我有一个data多维数组 最后一个是距离 另一方面 我有距离向量r 例如 Data np ones 20 30 100 r np linspace 10 50 100 最后 我还有一个临界距离值列表 称为r0 使得 r0 shape Dat
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • import matplotlib.pyplot 给出 AttributeError: 'NoneType' 对象没有属性 'is_interactive'

    我尝试在 Pycharm 控制台中导入 matplotlib pyplt import matplotlib pyplot as plt 然后作为回报我得到 Traceback most recent call last File D Pr
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • Python:XML 内所有标签名称中的字符串替换(将连字符替换为下划线)

    我有一个格式不太好的 XML 标签名称内有连字符 我想用下划线替换它 以便能够与 lxml objectify 一起使用 我想替换所有标签名称 包括嵌套的子标签 示例 XML
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • Scipy Sparse:SciPy/NumPy 更新后出现奇异矩阵警告

    我的问题是由大型电阻器系统的节点分析产生的 我基本上是在设置一个大的稀疏矩阵A 我的解向量b 我正在尝试求解线性方程A x b 为了做到这一点 我正在使用scipy sparse linalg spsolve method 直到最近 一切都
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是

随机推荐

  • Go 中通过 new(Type) 和 &Type{} 分配内存的区别

    考虑以下示例 type House struct func main house1 new House house2 House fmt Printf T T n house1 house2 Output main House main H
  • 超级丑陋的数字

    所以问题是 编写一个程序来查找第 n 个超级丑数 超级丑数是正数 其所有素数因子都在给定素数列表中 大小为 k 的素数 例如 1 2 4 7 8 13 14 16 19 26 28 32 是给定素数的前 12 个超级丑数的序列 2 7 13
  • 使用 v2.0 端点的声明中缺少 UPN

    我已经设置了一个类似于 Microsoft 的以下示例的项目 其中我有一个本机应用程序请求使用 v2 0 端点访问 Web api https github com azureadquickstarts appmodelv2 nativec
  • 通过SPARQL UPDATE从本体中删除空白节点

    我在 SPARQL UPDATE 插入 操作的帮助下将一些数据存储在 protege 中制作的本体模型中 以下是更新查询 PREFIX test
  • Direct3D 中的矩阵多阶

    关于在 Direct3D 中乘法矩阵以获得结果 我收到了两个相互矛盾的答案 教程确实规定从左到右相乘 这很好 但这不是我想象的方式 这是一个例子 OpenGL 从上到下阅读 GLRotatef 90 0f GLTranslatef 20 0
  • 将操作添加到自定义 UITableViewCell

    我正在构建一个简单的应用程序 其中包含填充了自定义视图单元格的表格视图并使用故事板 我想在用户每次点击单元格时在单元格上添加一个操作 到目前为止 我尝试创建一个IBOutle将我的手机连接到我的tableViewController并在代码
  • .net Ajax calendarExtender 在 IE7 中剪切星期六(在 Firefox 中工作正常)

    我在 IE7 中遇到了这个问题 日历中似乎缺少星期六 它在 Firefox 中显示良好 一些人建议这可能是我的其他样式表搞乱了它 所以我现在使用自定义日历 CSS 主题 但我仍然遇到同样的问题 有任何想法吗 使用的 ajax 工具包是否存在
  • GCP 计算实例的公共实例 CNAME

    Azure 提供了一种使用以下方式访问 VM 的方法 cloudapp net GCP中有类似的东西吗 如果是 我在哪里 如何查看访问实例的确切 CNAME 我读到它 googleapi com 但无法在 GCP 门户上的任何位置找到它 N
  • Scrapy - 抓取时发现的抓取链接

    我只能假设这是 Scrapy 中最基本的事情之一 但我就是不知道如何去做 基本上 我会抓取一页来获取包含本周更新的网址列表 然后我需要一一进入这些网址并从中获取信息 我目前已经设置了两个刮刀 并且它们可以完美地手动工作 因此 我首先从第一个
  • 单个字符串可以包含多行吗?

    例如 如果我将多行分配给一个字符串 如下所示 while line reader readLine null output line n 我是否可以将带有行分隔符的输出作为一个字符串返回 我正在编写一个具有客户端和服务器程序的套接字程序 其
  • ASP.NET 从母版页调用控制器方法?

    在 ASP NET MVC2 中 如何从母版页调用控制器方法 举例来说 我想在主数据中包含一些概述数据 Logo Welcome xyz total sales this month 999 Home Sales Import Export
  • 我可以让 H2 在内存数据库中自动创建模式吗?

    我已经看过了内存中的 H2 数据库 通过 Spring Hibernate 初始化模式 https stackoverflow com questions 1945175 h2 database in memory init schema
  • 抛出旧异常的同时抛出新异常

    如果在由异常引起的堆栈展开期间 C 中的析构函数抛出异常 则程序将终止 这就是为什么析构函数永远不应该在 C 中抛出 示例 struct Foo Foo throw 2 whoops already throwing 1 at this p
  • Java - 设置jScrollBar的位置

    我在 JScrollPane 中有一个 JTable 该表每隔一段时间就会获取新的数据行 最终 数据行数超出了一次显示的数量 因此 ScrollPane 启动 我希望 Scroll Pane 在每次添加新数据时跳到底部 到其最大值 所以我写
  • JWT 身份验证:使用 UI 令牌来验证 Graphene/Django (GraphQL) 查询?

    我正在开发一个具有以下架构的项目 UI 通过 Node 服务器 GraphQL 的 Apollo 客户端对客户端和服务器端渲染进行反应 API Django 通过 Graphene 处理 GraphQL 查询 我使用 Auth0 基于 JW
  • 是否可以使用“使用 PayPal 登录”代表用户发出 REST api 请求?

    我们已经成功整合了使用 PayPal 登录 以前称为 PayPal Access https developer paypal com webapps developer docs integration direct log in wit
  • 如何从 gmtime() 的时间+日期输出中获取自纪元以来的秒数?

    你如何做反向gmtime 你把时间 日期放在哪里并获取秒数 我有像这样的字符串 Jul 9 2009 20 02 58 UTC 我想获取该纪元与 2009 年 7 月 9 日之间的秒数 我努力了time strftime但我不知道如何正确使
  • IllegalStateException:应用程序的 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged

    我正在使用ViewPager示例与ActionBar取自 Android 文档的选项卡here http developer android com reference android support v4 view ViewPager h
  • CouchDB复制忽略零星文档

    我的应用程序有一个 CouchDB 设置 CouchDB 2 1 1 它在很大程度上依赖于复制完整性 我们使用 每个用户一个数据库 方法 并附加一层 角色 db s 将用户分组 如下图所示 最近 在增加测试人员数量的同时 我们发现一些文档没
  • 为 dev_appserver 导入 python 模块的正确方法是什么?

    Intent 我正在为 App Engine 创建一个 CRUD 应用程序 其中用户通过 OAuth 进行身份验证 服务器将其访问和刷新令牌存储在数据存储区中 我正在进行本地测试dev appserver并陷入进退两难的境地 The pyt