【问题标题】:File not found in app hosted in pythonanywhere在 pythonanywhere 中托管的应用程序中找不到文件
【发布时间】:2018-12-06 06:36:25
【问题描述】:

这里有答案-File not found on pythonanywhere.com

但在我的情况下它不起作用。

我已将文件放在项目主目录和/project/static 目录中 -

我的代码 -

from flask import Flask, render_template, request
from flask_cors import CORS, cross_origin
from diffdiag import DifferentialDiagScript2 as dd
import os

app = Flask(__name__)
app.config['CORS_HEADERS'] = 'Content-Type'
cors = CORS(app, resources={r"/*": {"origins": "*"}})

@app.route('/')
@cross_origin()
def index():
    module_dir = os.path.dirname(__file__)
    file_path = os.path.join(module_dir, 'literature.csv')
    items = list(line.strip() for line in open(file_path))
    return render_template('index.html', table = items)

我也试过了——

items = list(line.strip() for line in open(f2))

items = list(line.strip() for line in open('./static/f2'))

items = list(line.strip() for line in open('/home/daddyodevil/add/Automated_DD/f2'))

items = list(line.strip() for line in open('/home/daddyodevil/add/Automated_DD/static/f2'))

似乎没有任何效果。

感谢任何帮助。

编辑 1 - 添加完整错误

Exception on / [GET]#012Traceback (most recent call last):#012  File "/home/daddyodevil/.local/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app#012    response = self.full_dispatch_request()#012  File "/home/daddyodevil/.local/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request#012    rv = self.handle_user_exception(e)#012  File "/home/daddyodevil/.local/lib/python3.6/site-packages/flask_cors/extension.py", line 161, in wrapped_function#012    return cors_after_request(app.make_response(f(*args, **kwargs)))#012  File "/home/daddyodevil/.local/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception#012    reraise(exc_type, exc_value, tb)#012  File "/home/daddyodevil/.local/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise#012    raise value#012  File "/home/daddyodevil/.local/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request#012    rv = self.dispatch_request()#012  File "/home/daddyodevil/.local/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request#012    return self.view_functions[rule.endpoint](**req.view_args)#012  File "/home/daddyodevil/.local/lib/python3.6/site-packages/flask_cors/decorator.py", line 128, in wrapped_function#012    resp = make_response(f(*args, **kwargs))#012  File "/home/daddyodevil/add/Automated_DD/app.py", line 13, in index#012    items = list(line.strip() for line in open("./static/f2"))#012FileNotFoundError: [Errno 2] No such file or directory: './static/f2'

编辑 2 - 添加尝试在 pythonanywhere 中运行 app.py 时收到的错误

 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
Traceback (most recent call last):
  File "/home/daddyodevil/add/Automated_DD/app.py", line 47, in <module>
    app.run()
  File "/home/daddyodevil/.local/lib/python3.6/site-packages/flask/app.py", line 943, in run
    run_simple(host, port, self, **options)
  File "/home/daddyodevil/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 814, in run_simple
    inner()
  File "/home/daddyodevil/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 774, in inner
    fd=fd)
  File "/home/daddyodevil/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 660, in make_server
    passthrough_errors, ssl_context, fd=fd)
  File "/home/daddyodevil/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 577, in __init__
    self.address_family), handler)
  File "/usr/lib/python3.6/socketserver.py", line 453, in __init__
    self.server_bind()
  File "/usr/lib/python3.6/http/server.py", line 136, in server_bind
    socketserver.TCPServer.server_bind(self)
  File "/usr/lib/python3.6/socketserver.py", line 467, in server_bind
    self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use

【问题讨论】:

  • 您遇到的错误是什么?可以贴在这里吗?
  • @Mufeed,做到了。

标签: python flask pythonanywhere


【解决方案1】:

在 PythonAnywhere 控制台中运行 app.py 不太可能工作——它会尝试绑定到端口并侦听连接,并且完全有可能其他人正在使用该端口。

您在网站错误日志中看到的问题是因为您试图打开文件'./static/f2'。此路径相对于应用程序运行的目录进行解析,该目录不一定与包含模块的目录相同,也可能不是主目录。

如果你想在与模块相同的目录中加载一个,并且你已经有代码可以像这样计算模块目录

module_dir = os.path.abspath(os.path.dirname(__file__))

...然后您可以通过更改行来更改您的代码以使用该module_dir

items = list(line.strip() for line in open("./static/f2"))

...变成这样:

items = list(line.strip() for line in open(os.path.join(module_dir, "./static/f2")))

【讨论】:

    【解决方案2】:

    链接的答案对您不起作用,因为您没有正确遵循它。将您的模块目录包装在os.path.abspath() 中,以便获得链接答案所建议的绝对路径:

    module_dir = os.path.abspath(os.path.dirname(__file__))
    

    编辑

    还要确保这个文件相对于你的模块目录确实存在:

    './static/f2'
    

    因为这是抛出异常的地方(查看堆栈跟踪的最后一行):

    items = list(line.strip() for line in open("./static/f2"))
    #012FileNotFoundError: [Errno 2] No such file or directory: './static/f2'
    

    【讨论】:

    • Yeti,它不起作用,如果你看到我附加的图像,可以看出文件 f2 在主 / 目录以及 /static/ 目录中。
    • 我看到您现在编辑的错误消息与以前不同 (OSError: [Errno 98] Address already in use)。这是否意味着在您进行此更改后旧错误不再出现?
    • 不,当我尝试访问 daddyodevil.pythonanywhere.com 并出现在错误日志中时,旧错误仍然存​​在。 5我添加到帖子中的新错误是我尝试在 python 任何控制台中“运行”app.py 时遇到的错误。
    猜你喜欢
    • 1970-01-01
    • 2017-08-23
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2019-07-14
    • 2023-03-30
    相关资源
    最近更新 更多