在Windows上运行Flask应用程序引发了“尝试对非套接字对象进行操作”的错误。

4
当运行一个基本的Flask应用程序时,在shell中会出现这个错误,并且我找不到解决方法。
 Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) <br/>
 Restarting with stat<br/>
 Debugger is active!<br/>
 Debugger pin code: 295-257-376<br/>
Exception in thread Thread-1:<br/>
Traceback (most recent call last):<br/>
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\threading.py", line 923, in _bootstrap_inner
    self.run()<br/>
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\threading.py", line 871, in run
    self._target(*self._args, **self._kwargs) <br/>
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\site-packages\werkzeug\serving.py", line 656, in inner
    fd=fd)<br/>
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\site-packages\werkzeug\serving.py", line 550, in make_server
    passthrough_errors, ssl_context, fd=fd)<br/>
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\site-packages\werkzeug\serving.py", line 462, in __init__
    socket.SOCK_STREAM)<br/>
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\socket.py", line 446, in fromfd
    nfd = dup(fd)<br/>
OSError: [WinError 10038] An operation was attempted on something that is not a socket

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def main():
    return render_template('main.html')

app.run(debug=True)

1
你关闭防火墙后(作为测试),还有错误吗? - SaeX
即使关闭了防火墙,它仍然没有起作用。错误与上述相同。 - kurri sudarshan reddy
这个问题的根本原因是它试图将文件句柄作为套接字打开,而Windows不支持。虽然它试图这样做似乎没有太多意义。 - Wayne Werner
我也遇到了同样的错误,有没有人已经找到了解决方法? - mautrok
将近7年过去了,这个错误仍然存在。有人找到解决办法了吗? - Hendrik Wiese
显示剩余3条评论
2个回答

0

您目前正在尝试从全局 Python 安装中执行此操作。使用虚拟环境来为 Python 项目保留每个项目的 pip 安装是一种“好的实践”。

首先运行 pip install virtualenv

然后,导航到您的项目文件夹并执行 virtualenv example-virtual-env。这将创建一个新文件夹,其中包含自己的 Python 和 pip 安装。(它也支持 Python 3 的虚拟环境。)

现在在 shell 中,执行 <projects_folder>\Scripts\activate 来激活您的虚拟环境。现在,您执行的每个 pip install 都将在此环境中进行(请注意,在您的 shell 光标之前的环境名称。)

在此处,运行您的 pip install flask 并运行您的 Flask 应用程序。

如果您仍然遇到问题,请尝试以管理员模式运行 CMD。


我之前也尝试过创建虚拟环境并以管理员身份运行Flask应用程序,但这并没有解决问题。 - kurri sudarshan reddy

0

我知道这不是解决核心问题的方法,但对我来说,只有在将调试标志设置为True时才会出现此问题。如果您可以在没有调试/重新加载功能的情况下使用您的应用程序,您可能想要尝试一下:

app.run(debug=False)

与此同时,我也在寻找一种实际在 Windows 上使用调试模式的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接