Flask应用程序在部署到pythonanywhere时无法运行

1 python flask

我正在开发一个调用电影数据库的网络应用程序.当它在localhost上运行时,一切运行正常.我正试图在pythonanywhere上部署它.我创建了一个虚拟环境并安装了所有依赖项.我相信我已正确编辑了WSGI文件.

import sys
path = '/home/gcmatt/capstone/src'
if path not in sys.path
   sys.path.append(path)
from app import app as application
Run Code Online (Sandbox Code Playgroud)

至少从我得到的错误消息看来它已经找到了文件.当我尝试加载页面时,它无法运行.看来由于某种原因,代码不会导入我自己的函数src.models.search.

2018-03-31 15:28:50,341: Error running WSGI application
2018-03-31 15:28:50,349: ModuleNotFoundError: No module named 'src'
2018-03-31 15:28:50,349:   File 
"/var/www/gcmatt_pythonanywhere_com_wsgi.py", line 82, in <module>
2018-03-31 15:28:50,349:     from app import app as application  # noqa
2018-03-31 15:28:50,349: 
2018-03-31 15:28:50,349:   File "/home/gcmatt/capstone/src/app.py", 
line 4, in <module>
2018-03-31 15:28:50,350:     from src.models.search import Search 
Run Code Online (Sandbox Code Playgroud)

我是否需要更改python代码中的文件结构或文件路径才能运行应用程序?我在任何地方都遵循python上的教程,觉得我已经正确设置了所有内容.

这就是我的目录结构

capstone/
|--.git/
|--src/
   |models/
    |--__init__.py
    |--results.py
    |--search.py
  |--templates
    |--base.html
    |--home.html
    |--noresults.html
    |--search.html
  |--__init__.py
  |--api_file.txt
  |--app.py
  |--requirements.txt
Run Code Online (Sandbox Code Playgroud)

Gab*_*rse 5

由于您设置path = '/home/gcmatt/capstone/src'了该src模块,因此该模块不可用path.只有models,templates等等.

Python只会识别一个包,如果它可以看到一个包含在其中的子目录__init__.py.无论当前目录是否有,它都不会将当前目录识别为包__init__.py.

尝试设置path = '/home/gcmatt/capstone',它应该能够检测到包src.

在此编辑:您可能还想说 from src.app import app as application

在这里进行第二次编辑:在您的工作中,app.py您还应该更改导入以导入子包而不是src.[something].例如:from models.search import Search.您的WSGI将看到该包src,并src.app从中导入.然后src.app导入相对于自身的包(即import models).

来源:我在很多应用程序中使用PythonAnywhere :)

以下是对常规Python包的进一步阅读.