我有一个用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
答案 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)。