在 aws Elastic BeanStalk 服务器上使用 os.getcwd() 读取文件的问题
Posted
技术标签:
【中文标题】在 aws Elastic BeanStalk 服务器上使用 os.getcwd() 读取文件的问题【英文标题】:Issue with reading files from using os.getcwd() on aws ElasticBean Stalk server 【发布时间】:2021-10-01 10:23:08 【问题描述】:我的 Flask/Dash 应用程序读取文件 /data
目录。当我在本地运行应用程序时,我使用os.getcwd()
来读取 csv 文件。
df = pd.read_csv(os.getcwd() + "/data/file1.csv")
但是,在将应用程序部署到 AWS EB 实例/服务器时,我遇到了以下错误。
File "/var/app/current/base_rent_calc.py", line 38, in <module>
Jul 24 04:53:43 ip-172-31-20-89 web: df = pd.read_csv(os.getcwd() + "/data/file1.csv")
Jul 24 04:53:43 ip-172-31-20-89 web: FileNotFoundError: [Errno 2] No such file or directory
如何设置正确的文件路径/目录?或者我如何检查 AWS ElasticBean 上的 os.getcwd()
是什么。
【问题讨论】:
您假设data/
在您当前的工作目录中。看看你的应用是如何在 EB 中启动的——它是否指定了一个目录?
【参考方案1】:
我认为您需要连接到 Elastic Beanstalk 实例,找到“file1.csv”文件的文件路径,并为此使用绝对路径。
有关于如何连接到运行您的 EB 实例 here 的 EC2 实例的文档。一旦你有了一个 ssh 会话,你就需要四处寻找文件。根据您的回答,我会这样做
cd /var/app/current
ls -lha
这将显示我猜你的应用正在运行的目录中的所有文件。
一旦你也进入了那个目录,你就可以得到一个 python shell 并通过输入 python 来查看 os.getcwd() 的作用。
【讨论】:
所有应用程序文件都在/var/app/current
中,包括包含我要阅读的文件的数据文件夹。当我运行 os.getcwd() 时,路径是 `/var/app/current'。
如果你输入 head -n 10 /var/app/current/data/file1.csv 会发生什么?如果这为您提供了所需文件的输出,那么我会将 os.getcwd() + "/data/file1.csv" 替换为 "/var/app/current/data/file1.csv"。
运行head -n 10 /var/app/current/data/file1.csv
打开文件/给出我正在寻找的输出。好的,我可以替换os.getcwd()
,但是,不明白为什么它不起作用。
用文件的绝对路径替换它会修复代码吗?【参考方案2】:
检查 AWS ElasticBean 上的 os.getcwd() 是什么。
当您部署应用程序时,这将是 /var/app/staging
;当应用程序已部署时,这将是 /var/app/current
。
【讨论】:
@kms 这就是我写的。所以不确定你的评论是什么意思?以上是关于在 aws Elastic BeanStalk 服务器上使用 os.getcwd() 读取文件的问题的主要内容,如果未能解决你的问题,请参考以下文章
Amazon Elastic BeanStalk 错误:无法创建 AWS Elastic Beanstalk 应用程序版本
如何在 aws elastic beanstalk 环境实例启动上运行 shell 脚本
无法在 AWS Elastic Beanstalk 中创建环境?