IIS部署Flask服务导入IPython遇underlying buffer has been detached错误求助
IIS部署Flask时导入IPython报"underlying buffer has been detached"错误的解决方法
问题场景
在IIS上部署Flask服务后,只要代码中包含import IPython语句就会报错,换用IPython 5.0、6.0、7.16.3版本均无法解决。但通过CMD直接运行代码可以正常启动本地服务器。
环境配置
python 3.6 Flask==1.1.2 Keras==2.1.3 scikit-learn==0.23.2 scipy==1.4.1 tensorflow==1.14.0 wfastcgi==3.0.0
示例代码
from flask import Flask import IPython app = Flask(__name__) @app.route("/flaskapi2/") def hello(): return "Hello from FastCGI via IIS!" if __name__ == "__main__": app.run()
错误信息
Error occurred while reading WSGI handler: Traceback (most recent call last): File "E:\deploy_car_damage\wfastcgi.py", line 791, in main env, handler = read_wsgi_handler(response.physical_path) File "E:\deploy_car_damage\wfastcgi.py", line 633, in read_wsgi_handler handler = get_wsgi_handler(os.getenv("WSGI_HANDLER")) File "E:\deploy_car_damage\wfastcgi.py", line 600, in get_wsgi_handler handler = __import__(module_name, fromlist=[name_list[0][0]]) File ".\main.py", line 2, in <module> import IPython File "E:\deploy_car_damage\venv36\lib\site-packages\IPython\__init__.py", line 56, in <module> from .terminal.embed import embed File "E:\deploy_car_damage\venv36\lib\site-packages\IPython\terminal\embed.py", line 15, in <module> from IPython.core.interactiveshell import DummyMod, InteractiveShell File "E:\deploy_car_damage\venv36\lib\site-packages\IPython\core\interactiveshell.py", line 63, in <module> from IPython.utils import io File "E:\deploy_car_damage\venv36\lib\site-packages\IPython\utils\io.py", line 94, in <module> stdin = IOStream(sys.stdin, fallback=devnull) File "E:\deploy_car_damage\venv36\lib\site-packages\IPython\utils\io.py", line 38, in __init__ for meth in filter(clone, dir(stream)): File "E:\deploy_car_damage\venv36\lib\site-packages\IPython\utils\io.py", line 37, in clone return not hasattr(self, meth) and not meth.startswith('_') File "E:\deploy_car_damage\venv36\lib\site-packages\IPython\utils\io.py", line 81, in closed return self.stream.closed ValueError: underlying buffer has been detached StdOut: StdErr:
错误含义解释
underlying buffer has been detached表示IPython初始化过程中尝试访问sys.stdin(标准输入流)的缓冲区,但在IIS通过wfastcgi托管的服务环境中,标准输入流的缓冲区已经被分离。IPython是为交互式终端设计的,依赖可交互的标准输入,但CGI模式下的服务环境没有交互式输入流,导致IPython无法正常初始化。
解决方法
方法一:直接移除IPython导入
IPython仅用于交互式调试,在IIS托管的生产服务环境中完全不需要。直接删掉代码中的import IPython语句即可解决问题。
方法二:条件导入IPython(保留本地调试功能)
如果需要在本地运行时保留IPython的调试功能,同时避免IIS环境报错,可以通过条件判断只在本地启动时导入IPython:
from flask import Flask app = Flask(__name__) @app.route("/flaskapi2/") def hello(): return "Hello from FastCGI via IIS!" if __name__ == "__main__": # 仅本地启动时导入并使用IPython import IPython # 这里可以添加IPython相关的调试代码 app.run()
内容的提问来源于stack exchange,提问作者Mogli141
相关产品推荐
相关产品推荐

