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

时间:2018-03-31 16:19:53

标签: 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

至少从我得到的错误消息中,它似乎找到了文件。 当我尝试加载页面时,它无法运行。看来由于某种原因,代码不会导入我自己的函数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 

我是否需要更改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

1 个答案:

答案 0 :(得分:5)

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

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 :)

Here is some further reading on regular Python packages