如何使用python从另一个目录导入库?

时间:2015-01-23 18:15:26

标签: python google-app-engine python-2.7

我正在使用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

1 个答案:

答案 0 :(得分:1)

您可能会与Python沙箱发生冲突,它试图确保导入在本地开发环境中成功或失败,就像它们在部署时一样(因为它的重点确实是为了帮助您开发)一旦准备好并经过充分测试,本地用于生产部署的东西。)

沙箱在您main.py之前获得控制权,除其他外,它会根据sys.path的初始值设置检查,与您可能正在进行的进一步更改无关。

但是你的原始目录结构应该没问题 - 只需更改你的

即可
import oauth2

from lib import oauth2

你应该很高兴(包lib sys.path开始,因为它位于您的主目录中 - 并且一个包,感谢存在这个小小的__init__.py文件: - )。