小编Lin*_*say的帖子

在OS X下在PyCharm上运行GAE GCS,运行时错误"没有名为cloudstorage的模块"

我正在尝试将Google云端存储功能添加到已经运行了重要功能的Python GAE应用中.我在我的开发计算机上完全在PyCharm中工作,这是一台运行OS X 10.9.5的Mac.

我创建了一个包含此语句的新Python模块:

import cloudstorage as gcs
Run Code Online (Sandbox Code Playgroud)

https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/getstarted中的示例代码所示

当我第一次添加该行时,PyCharm在编辑器中说"没有名为cloudstorage的模块".

然后,我按照https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download 上的"pip"和"svn"说明下载GCS客户端库.

在尝试遵循这些说明时,考虑到我之前使用此编程环境的经验,我实际上尝试过使用"pip"三次:

  • 一旦没有"-t"选项,因为我之前从未需要"pip"选项
  • 使用"-t"选项指定我的应用程序目录的"lib"子目录
  • 一旦使用: pip install GoogleAppEngineCloudStorageClient -t /Applications/GoogleAppEngineLauncher.app//Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib,因为我不确定"<your_app_directory/lib>"的含义是什么

如上所述,我还执行了"svn"命令.然后,正如在Ubuntu 14.04上安装python google云存储客户端中所提到的,我运行了"cd gcs-client/src"和"sudo python setup.py install".我在用户根目录中运行了这些命令.

在GCS客户端库的每个成功但不同的安装之后,我查看了我的模块的PyCharm编辑器窗口,它总是具有相同的"没有名为cloudstorage的模块"错误.但作为一个实验,我也会尝试重启PyCharm,并尝试运行我的应用程序.

在某些时候,编辑器窗口停止显示错误.它不是在上面的一个步骤之后立即,而是在我离开阅读各种网页然后再回来再次查看错误之后.我不知道哪个安装是在PyCharm编辑器中摆脱错误消息的安装.

无论如何,每当我尝试运行应用程序时(再次在PyCharm中),我总是在同一个import语句中得到运行时错误"ImportError:No module named cloudstorage".

此应用程序的"运行/调试配置"页面同时选中"将内容根添加到PYTHONPATH"和"将源根添加到PYTHONPATH".

当然,我想要的主要帮助是如何通过"无模块名为cloudstorage"运行时错误,即使import语句不再显示错误.

我想我还有多达三个虚假版本的GCS客户端库.我更关心的是越过"未找到模块",因为它是一个显示阻止,但如果你有任何想法我怎么能删除虚假版本,以便他们不只是躺着,我会是最也感谢你的帮助.

google-app-engine pycharm google-cloud-storage

10
推荐指数
2
解决办法
6238
查看次数

在Firebase托管上运行Ionic应用程序作为PWA

背景

我们有一个大型的Ionic v1应用程序可以在Android上运行(通过Google Play商店获取),也可以通过"离子服务"在我们的开发机器上运行.

该应用使用Google App Engine(GAE)网站作为后端服务器.服务器通过cookie为每个用户维护会话.我们不会在会话中存储太多数据,但我们需要安全地识别发出每个请求的用户.当应用程序成功运行时,GAE服务器代码会创建一个包含会话ID的cookie,并在响应每个HTTP请求时将其发送到Ionic客户端代码.

请注意,Ionic代码不以任何方式访问cookie.只需要将相同的cookie与每个后续请求一起发送回GAE服务器,以便GAE代码识别用户.

目标

我们希望使用Firebase Hosting提供Ionic代码.事实上我们可以在两种模式中这样做:

一个.将Ionic代码保存在我们的开发机器上,运行"firebase serve",然后在浏览器上转到"localhost:5000"

湾 将Ionic代码部署到Firebase主机并在浏览器上转到"xxxx.firebaseapp.com"

一切正常!呃,除了一件小事,我们几周都试图解决这个问题......

问题

所使用的GAE代码来管理会话连续性,并通过GAE代码生成的HTTP请求的响应发送的cookie的,不回来,从火力地堡上运行的应用程序离子的下一个请求.因此,GAE应用程序始终响应,就像用户尚未登录一样.

事实上,进一步的测试表明,在响应发送的HTTP请求的会话cookie甚至不会在浏览器设置(所以当然这不是发送回GAE代码与下一个HTTP请求).后端服务器上的GAE代码始终响应,就好像这是会话的第一个HTTP请求一样.

我们消除了什么

  • 问题不在于Ionic不支持cookie.我们知道这不是问题,因为该应用程序可以作为Android应用程序和"离子服务"运行良好.在这两种情况下,GAE后端都能够使用cookie来维护会话,以将会话ID从一个请求存储到下一个请求.

  • 使用"memcache"而不是GAE会话支持的cookie不能解决问题,因为即使你使用memcache,你仍然需要会话ID的cookie.如果您愿意,可以使用默认设置,让GAE会话支持使用cookie; 在这种情况下,它将对会话ID和任何其他会话数据使用相同的cookie.

  • 使用"__session"作为cookie的名称无法解决问题.Firebase确实支持使用这样的cookie名称,但显然仅在运行带有云功能的Firebase托管的环境中.云功能用于运行后端代码,而不是用户与之交互的客户端代码.我们无法看到将Ionic应用程序作为云功能运行.如果没有云功能,GAE后端设置的"__session"cookie显然会被运行应用程序的浏览器客户端以及所有其他cookie剥离.

  • 加入"访问控制允许来源/ -Credentials/-方法/ -headers"报头到GAE码生成的响应,并设置crossDomain: true xhrFields: { withCredentials: true }在客户机侧,没有改善的情况.仍然没有在浏览器上设置GAE代码的cookie.

任何帮助将非常感谢.

cookies google-app-engine cross-browser cross-domain ionic-framework

10
推荐指数
0
解决办法
247
查看次数

ImportError:没有名为httplib2的模块

我有一个Python 2.7 GAE应用程序,它已经具有很多功能.现在我想要与Google API集成.

在我在Mac OSX上运行的IDE(PyCharm)中,我将以下行添加到我的应用程序的主程序中:

import httplib2
pass
Run Code Online (Sandbox Code Playgroud)

当我命令单击"httplib2"时,IDE 在编辑器面板中打开"httplib2-0.8-py2.7.egg/httplib2/init.py ",因此IDE显然知道httplib2在哪里.但运行应用程序,我得到标题中显示的错误.

为了进一步测试,我在上面显示的两个语句上放置了断点,然后在调试模式下运行应用程序.当它到达import语句时,我立即单击"Resume Program"图标.

然后控制台显示:

ImportError: No module named httplib2
Run Code Online (Sandbox Code Playgroud)

程序然后循环.也就是说,它不会终止,但它永远不会到达"通过"语句.

所以IDE似乎知道"httplib2"在哪里,但Python似乎并不存在.任何有关如何"导入httplib2"成功的帮助将不胜感激.谢谢.

python google-app-engine httplib2 importerror

8
推荐指数
1
解决办法
8480
查看次数

从Google App Engine Python应用访问Google云端硬盘

我有一个现有的Google App Engine Python应用程序,它具有很多功能.我现在想要将Google云端硬盘集成到应用中.具体来说,我希望我的应用能够:

  1. 在我的用户的Google云端硬盘中创建一个空文件,我的用户可以在其中创建Google文档.
  2. 从Google云端硬盘中检索该文件,以便在我的应用中进一步处理.
  3. 定期将其发送回Google云端硬盘,以便用户可以将其作为Google文档进行进一步编辑.

如果有人知道如何做我想做的事情,可以将我引导到符合我的SPECIFIC要求的SPECIFIC Google网页(不是像"DrEdit示例"这样的一般答案),我将永远感激不尽. .提前致谢!

更新:

根据drive-v2-python-appengine在答案1中的建议生成的示例代码,这是我的程序,其中包含用于创建空文件的RequestHandler:

import os
import webapp2

import io

from google.appengine.api import memcache

import httplib2
from apiclient.discovery import build
from apiclient.http import MediaIoBaseUpload
from oauth2client.appengine import oauth2decorator_from_clientsecrets


decorator = oauth2decorator_from_clientsecrets(
    os.path.join(os.path.dirname(__file__), 'client_secrets.json'),
    scope=[
        'https://www.googleapis.com/auth/drive',
    ])

http = httplib2.Http(memcache)
drive_service = build("drive", "v2", http=http)


class CreateEmptyFile(webapp2.RequestHandler):
    @decorator.oauth_required
    def get(self):
        body = {
            'title': 'Sample Document',
            'description': 'A sample document',
            'mimeType': 'text/plain'
        }
        media_body = MediaIoBaseUpload(io.BytesIO(""), mimetype='text/plain', resumable=True)
        file = drive_service.files().insert(body=body, …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine google-drive-api

6
推荐指数
1
解决办法
5308
查看次数

如何在 CKEDITOR.inline 之后使用 CKEDITOR.replace

我在内联模式下使用 CKEDITOR,每页有多个编辑器。为了创建它们,我<textarea>在 HTML 中使用标签,然后运行一个脚本,该脚本在CKEDITOR.inline()网页加载后立即针对每个标签执行。

只要我在“config.js”中定义最终配置,就可以正常工作,但我需要动态更新配置选项之一。

<textarea>这是我的脚本,在页面加载后使用 JQuery 循环遍历元素。作为诊断,我将语句CKEDITOR.replace()夹在中间alert<textarea>此代码用编辑器替换第一个并显示第一个alert语句。但是,它在CKEDITOR.replace()语句期间退出并且从不显示第二个alert.

$(function () {
    $("textarea").each(function () {
        editor = CKEDITOR.inline($(this)[0]);
        alert("Before replace, editor=" + editor);
        CKEDITOR.replace(editor, {
            filebrowserImageUploadUrl: "/new/url/to/be/executed"
        });
        alert("After replace");
    })
});
Run Code Online (Sandbox Code Playgroud)

不仅第二个alert不执行,而且我尝试更新的配置选项仍然保留在“config.js”中。

我认为我需要指定“editor”以外的其他内容作为该CKEDITOR.replace()语句的第一个参数,但我不知道是什么。

ckeditor

2
推荐指数
1
解决办法
1858
查看次数