Heroku部署Python应用时文件IO操作出现FileNotFoundError [Errno 2]
Heroku无法识别子目录内文件的原因及解决方案
核心原因
- 路径分隔符不兼容
你代码中使用的datafolder\\otherdata.csv是Windows系统的专属路径写法,反斜杠\是Windows的路径分隔符。而Heroku的运行环境基于Linux系统,仅识别正斜杠/作为路径分隔符,完全不支持反斜杠路径写法,因此会抛出FileNotFoundError错误。 - 相对路径基准漂移(潜在问题)
即使修改了路径分隔符,也有可能出现偶发的找不到文件的问题:Heroku启动应用进程时的工作目录,不一定和你项目的根目录完全对齐,硬写相对路径很容易出现基准不一致的问题。
最优解决方案
不要硬编码路径分隔符,使用Python内置的os模块动态拼接绝对路径,自动适配不同系统的路径规则:
import os import pandas as pd # 取当前执行脚本(main.py)所在的目录作为基准路径 BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # 自动适配系统的路径分隔符拼接文件路径 file_path = os.path.join(BASE_DIR, "datafolder", "otherdata.csv") df = pd.read_csv(file_path)
这种写法在本地Windows开发环境和Heroku的Linux环境都可以正常运行,不需要针对部署环境单独修改代码。
排查补充
如果后续遇到通过Heroku bash无法看到对应文件夹和文件的情况,请检查项目根目录的.gitignore文件是否排除了datafolder目录,导致部署时没有将该目录同步到Heroku服务器。
内容的提问来源于stack exchange,提问作者therion
相关产品推荐
相关产品推荐

