部署在PythonAnywhere的Flask应用报错求助:文件未找到及内部服务器错误
嘿,我之前也碰到过几乎一模一样的情况,结合你给出的错误日志来看,这个Internal Server Error的根源就是FileNotFoundError: [Errno 2] No such file or directory——说白了就是你的Flask应用在运行时尝试访问某个文件/文件夹,但服务器上根本找不到它。具体原因大概率是这几个:
相对路径在服务器环境失效
本地开发时用相对路径(比如open("config.json"))完全没问题,但PythonAnywhere的部署环境里,Flask应用的工作目录可能和你本地项目根目录不一样。比如你本地的文件在./data/下,但服务器上应用的运行目录是你的home目录,自然找不到目标文件。必要文件没同步到服务器
可能你本地测试用的配置文件、静态资源或者数据文件,没通过PythonAnywhere的文件管理器、Git或者其他方式同步到服务器上,导致应用运行时“抓瞎”。权限问题(少见但值得排查)
极少数情况下,文件确实存在,但运行Flask应用的用户(比如PythonAnywhere的默认用户)没有读取权限,系统也会返回类似“找不到”的错误提示。
排查和修复步骤:
先搞清楚服务器的工作目录
在你的Flask视图里加一段临时代码,打印当前运行目录:import os print("当前工作目录:", os.getcwd())然后去PythonAnywhere的错误日志里找这个输出,对比你要访问的文件实际位置,直接改用绝对路径(比如
/home/jobad/my_flask_app/data.txt),别再用相对路径了。检查文件是否真的在服务器上
登录PythonAnywhere控制面板,打开文件管理器导航到你的项目目录,确认需要的文件是不是真的存在。如果没上传,赶紧用文件管理器上传,或者通过Git拉取你的代码仓库同步文件。核对路径分隔符
注意Linux系统(PythonAnywhere用的是Linux)的路径是斜杠/,别写成Windows的反斜杠\,这种小失误很容易踩坑。验证文件权限
如果文件存在还是报错,右键点击文件管理器里的目标文件,查看权限设置,确保运行应用的用户有读取权限(一般设置成644就足够)。
按照上面的步骤排查,基本就能解决这个问题啦,我之前就是把本地的相对路径改成服务器上的绝对路径,分分钟搞定。
内容的提问来源于stack exchange,提问作者derriadiergummi

