我有一个用 python 编写的网络应用程序,要在 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
最佳答案
您应该将您的应用程序打包到一个包中。这样层次结构看起来类似于:
webapp1
|
+---- __init__.py
|
+---- aufg1 (python package)
| |
| +-- ...
+---- aufg2
| |
| +-- __init__.py
| +-- all your other modules.py
+---- generaltooks
|
+-- ...
您还应该改掉使用 CamelCasing 命名包和模块的习惯。相反,将它们转换为小写 - generictools、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)。
关于python - 如何正确添加wsgi的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23760214/