我正在使用Google Application Engine开发python应用程序 如果目录结构和代码如下,则在导入库时会发生错误:
目录结构
Application
├── src
│ ├── main.py
└── lib
├── oauth2
│ └── files
└── __init__.py
源代码
import sys
sys.path.append(os.path.abspath(os.pardir + "/lib"))
import oauth2
错误消息
ERROR 2015-01-23 17:48:55,226 wsgi.py:263]
Traceback (most recent call last):
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject
obj = __import__(path[0])
File "/path/to/src/main.py", line 152, in <module>
import oauth2
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 934, in load_module
raise ImportError('No module named %s' % fullname)
我尝试了以下这些代码,但所有这些代码都让我犯了同样的错误......
case1
import sys
sys.path.append(os.pardir + "/lib")
import oauth2
case2 ..我差点被遗弃
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.abspath(__file__), os.pardir) + "/lib")
import oauth2
只有目录结构和代码如下所示
目录结构
Application
└── src
├── main.py
├── oauth2
│ └── files
└── __init__.py
源代码
import oauth2
更新
这不起作用。
目录结构
Application
├── src
│ ├── main.py
└── lib
├── oauth2
│ └── files
└── __init__.py
源代码
import sys
sys.path.append(os.path.abspath(os.pardir + "/lib"))
from lib import oauth2
答案 0 :(得分:1)
您可能会与Python沙箱发生冲突,它试图确保导入在本地开发环境中成功或失败,就像它们在部署时一样(因为它的重点确实是为了帮助您开发)一旦准备好并经过充分测试,本地用于生产部署的东西。)
沙箱在您main.py
之前获得控制权,除其他外,它会根据sys.path
的初始值设置检查,与您可能正在进行的进一步更改无关。
但是你的原始目录结构应该没问题 - 只需更改你的
即可import oauth2
到
from lib import oauth2
你应该很高兴(包lib
从sys.path
开始,因为它位于您的主目录中 - 并且是一个包,感谢存在这个小小的__init__.py
文件: - )。