【问题标题】:Running Flask app on Windows raises "an operation was attempted on something that is not a socket"在 Windows 上运行 Flask 应用程序会引发“尝试对非套接字的操作进行操作”
【发布时间】:2016-08-21 18:29:10
【问题描述】:

在运行基本的 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)

【问题讨论】:

  • 关闭防火墙后是否仍有错误(作为测试)?
  • 关闭防火墙也没有用。错误同上。
  • 好吧,其根本原因是它试图将文件句柄作为套接字打开,而 Windows 不支持。不过,它试图这样做似乎没有多大意义。
  • 您是否以管理员用户身份运行此脚本?因为您的 Python 安装在 Admin 用户的帐户中
  • 我尝试以管理员身份运行它,但没有成功。

标签: python flask


【解决方案1】:

您当前正尝试从全局 python 安装中执行此操作。为 python 项目使用虚拟环境以保持每个项目的 pip 安装分开是一种“好习惯”。

首先运行pip install virtualenv

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

现在在 shell 中,执行&lt;projects_folder&gt;\Scripts\activate,它会激活你的虚拟环境。现在,您执行的每个pip install 都将在此环境中(请注意您的 shell 光标之前的环境名称。)

在这里,运行您的 pip install flask 并运行您的烧瓶应用程序。

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

【讨论】:

  • 我之前也尝试过创建虚拟环境并以管理员身份运行烧瓶应用程序,但它没有解决问题。
【解决方案2】:

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

app.run(debug=False)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多