部署Flask应用至Railway时Gunicorn报ModuleNotFoundError求助
解决Railway部署Flask时Gunicorn找不到server模块的问题
问题原因
本地运行和IDE能正常工作,是因为它们自动把项目根目录(myproject)加入了Python的搜索路径(sys.path),所以server.sources这种导入能被解析。但Railway上执行Gunicorn时,默认是在server目录下启动,Python搜索路径里没有myproject目录,自然找不到server模块。
解决方案
方案1:修正导入语句(推荐)
因为app.py本身就在server目录下,直接导入同级的sources模块即可,不需要带上server前缀:
# 替换原来的导入语句 from sources.source_controller import SourceController
修改后,Procfile里的命令保持web: gunicorn app:app即可,无论在哪个目录运行都能正确解析导入。
方案2:调整Python路径,保留原导入语句
如果不想修改代码,可以在Gunicorn启动命令中指定项目根目录到Python路径:
- 打开
server目录下的Procfile - 将启动命令修改为:
web: PYTHONPATH=.. gunicorn app:app
PYTHONPATH=..会把server的父目录(也就是myproject)加入Python搜索路径,这样server模块就能被找到。
方案3:确认包结构完整性
确保sources目录下存在空的__init__.py文件,这是Python识别该目录为可导入包的必要条件。如果之前没加,创建这个文件后重新部署。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

