Oll*_*F-G 4 python google-app-engine python-2.7 app-engine-ndb google-cloud-datastore
我正在尝试为使用数据存储区的GAE程序编写测试.按照Google的文档,我看到我应该将SDK的路径添加到我的PYTHONPATH中.我这样做使用:
import sys
sys.path.remove('/usr/local/lib/python2.7/dist-packages') # Has a 'google' module, which I want to be sure isn't interfering.
sys.path.insert(1,'/home/olly/google-cloud-sdk/platform/google_appengine')
sys.path.insert(1, '/home/olly/google-cloud-sdk/platform/google_appengine/lib/yaml/lib')
Run Code Online (Sandbox Code Playgroud)
然后在运行文件时:
Traceback (most recent call last):
File "myapp_tests.py", line 20, in <module>
from google.appengine.ext import ndb
ImportError: No module named appengine.ext
Run Code Online (Sandbox Code Playgroud)
我已经安装在上面的位置的SDK,并期待在/home/olly/google-cloud-sdk/platform/google_appengine/我发现google文件夹,里面有一个__init__.py在里面,沿着appengine.基本上,文件夹结构对我来说很好,它们都被正确命名并有__init__.py文件.
在交互式控制台中,运行上面的命令后,我发现我可以运行:
import google
Run Code Online (Sandbox Code Playgroud)
没问题,但是当我尝试的时候
import google.appengine
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named appengine
Run Code Online (Sandbox Code Playgroud)
我的理解是,在__init__.py()目录中包含文件意味着可以像上面那样导入它们.我也做了一个sudo find / --name "google",唯一出现在我的PYTHONPATH中的是/usr/local/lib/python2.7/dist-packages我明确删除的那个,并且还在我前面插入了其余的路径.
我尝试使用GAE自己的方法:
import dev_appserver
dev_appserver.fix_sys_path()
Run Code Online (Sandbox Code Playgroud)
它为sys.path添加了很多路径,但仍然没有帮助我使它工作.
我还发现,当我添加'/home/olly/Servers/google_appengine/google'到我的路径时,我可以运行:
import appengine.ext
Run Code Online (Sandbox Code Playgroud)
但是跑步:
from appengine.ext import ndb
Run Code Online (Sandbox Code Playgroud)
原因:
Traceback (most recent call last):
File "booking_function_tests.py", line 16, in <module>
from appengine.ext import ndb
File "/home/olly/Servers/google_appengine/google/appengine/ext/ndb/__init__.py", line 7, in <module>
from tasklets import *
File "/home/olly/Servers/google_appengine/google/appengine/ext/ndb/tasklets.py", line 69, in <module>
from .google_imports import apiproxy_stub_map
File "/home/olly/Servers/google_appengine/google/appengine/ext/ndb/google_imports.py" , line 11, in <module>
from google3.storage.onestore.v3 import entity_pb
ImportError: No module named google3.storage.onestore.v3
Run Code Online (Sandbox Code Playgroud)
我错过了一些非常明显的东西吗 我该如何导入导入ndb?
编辑:我正在运行最新的SDK(1.9.34),但我在google_imports.py中有以下代码:
try:
from google.appengine.datastore import entity_pb
normal_environment = True
except ImportError:
try:
from google3.storage.onestore.v3 import entity_pb
normal_environment = False
except ImportError:
# If we are running locally but outside the context of App Engine.
try:
set_appengine_imports()
from google.appengine.datastore import entity_pb
normal_environment = True
except ImportError:
raise ImportError('Unable to find the App Engine SDK. '
'Did you remember to set the "GAE" environment '
'variable to be the path to the App Engine SDK?')
Run Code Online (Sandbox Code Playgroud)
另外,google.__path__给我'/usr/local/lib/python2.7/dist-packages'一条我认为之前删除的路径.以下是我如何删除它的摘录:
import sys
sys.path.insert(1, '/home/olly/Servers/google_appengine')
sys.path.insert(1, '/home/olly/Servers/google_appengine/lib/yaml/lib')
sys.path.remove('/usr/local/lib/python2.7/dist-packages')
import google
print google.__path__
print sys.path
['/usr/local/lib/python2.7/dist-packages/google']
['/home/olly/Servers/google_appengine/myapp', '/home/olly/Servers/google_appengine/lib/yaml/lib', '/home/olly/Servers/google_appengine/google', '/home/olly/Servers/google_appengine', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']
Run Code Online (Sandbox Code Playgroud)
所以我的sys.path更新了,但import google似乎仍然是从不再存在的路径导入,这将是我猜的问题的关键.我需要重新加载路径吗?
Bil*_*rin 13
总是在virtualenv中运行,我遇到的问题要少得多 .
我同意snakecharmerrb你应该打印google.__file__或google.__path_准确找出你要导入的内容.
此代码段也可以解决您的问题:
import google
gae_dir = google.__path__.append('/path/to/appengine_sdk//google_appengine/google')
sys.path.insert(0, gae_dir) # might not be necessary
import google.appengine # now it's on your import path`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14079 次 |
| 最近记录: |