如何正确添加wsgi的路径?

时间:2014-05-20 12:44:20

标签: python

我有一个用python编写的web应用程序,并在public_html上部署和使用它我有一个简短的Main.wsgi与此内容:

#!/usr/bin/python
# -*- encoding: utf-8 -*
import sys, os
from werkzeug.wrappers import Request
from PageManager import PageManager
import werkzeug.contrib.sessions as sessions

fsstore = sessions.FilesystemSessionStore()

sys.path.append(os.path.dirname(__file__))
os.chdir(os.path.dirname(__file__))

@Request.application
def app(request):
    pm = PageManager()
    session = request.environ["werkzeug.session"]
    return pm.processPage(request)

#application = app
application=sessions.SessionMiddleware(app,fsstore)

if __name__ == "__main__":
    from werkzeug.serving import run_simple
    run_simple("localhost", 8080, application,
               use_reloader=False, use_debugger=True)

现在问题是,当我尝试导航到这个.wsgi时,我得到以下错误:

ImportError: No module named PageManager

这是文件夹结构

WebApp_1/
├── aufg1
│   ├── ...
├── aufg2
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── Main.py
│   ├── Main.pyc
│   ├── PageRenderer.py
│   ├── PageRenderer.pyc
│   ├── SQLSecurity.pyc
│   └── Testing.py
├── GeneralTools
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── Main.wsgi
│   ├── PageManager.py
│   ├── PageManager.pyc

1 个答案:

答案 0 :(得分:1)

您应该将应用程序打包在一个包中。因此层次结构看起来类似于:

webapp1
  |
  +---- __init__.py
  |
  +---- aufg1 (python package)
  |       |
  |       +-- ...
  +---- aufg2
  |       |
  |       +-- __init__.py
  |       +-- all your other modules.py
  +---- generaltooks
          |
          +-- ...

您还应该打破使用CamelCasing命名包和模块的习惯。相反,将它们转换为小写 - generaltools,pagemanager等。

接下来,像这样更新您的导入:

import sys, os
from werkzeug.wrappers import Request
from webapp1.generaltools.pagemanager import PageManager
# If you do not rename your modules to lowercase, then use this import
# instead of the one above.
from WebApp_1.GeneralTools.PageManager import PageManager
import werkzeug.contrib.sessions as sessions

然后运行你的脚本。您需要成为上面的目录包webapp1(以便能够导入webapp1)。