我正在开发一个调用电影数据库的网络应用。当它在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
答案 0 :(得分: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 :)