我正在开发一个调用电影数据库的网络应用程序。在本地主机上运行时一切正常。我正在尝试将它部署在 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
请您参考如下方法:
由于您设置了 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 :)
