在 Windows 上使用 apache mod_wsgi 运行烧瓶应用程序时的导入冲突

Posted

技术标签:

【中文标题】在 Windows 上使用 apache mod_wsgi 运行烧瓶应用程序时的导入冲突【英文标题】:Import conflict when running flask app with apache mod_wsgi on windows 【发布时间】:2019-06-29 11:20:59 【问题描述】:

我允许您询问我在 Windows 上使用您的 mod_wsgi 移植托管烧瓶应用程序时遇到的问题

我有两个烧瓶应用程序,由于导入冲突,只有一个可以同时存在

即: 如果请求应用程序 1 我有响应 然后,如果我请求应用程序 2,我有内部服务器错误,日志中有错误... 然后,如果我重新启动 apache 并请求应用程序 2,我会得到响应,但如果我请求应用程序 1,我会遇到相同的内部服务器错误 如果我遇到一些像 numpy 这样的导入,两个应用程序可以同时处于活动状态

如果您对此问题有任何想法、链接或答案,我们将不胜感激?

我的安装描述如下

提前感谢您的巡演时间和您的作品

亚历山大

错误日志 mod_wsgi (pid=4936): 无法执行 Python 脚本文件 'D:/exec/Apache24/htdocs/wsgi/api_test_2.wsgi'。 mod_wsgi (pid=4936):处理 WSGI 脚本“D:/exec/Apache24/htdocs/wsgi/api_test_2.wsgi”时发生异常。 回溯(最近一次通话最后一次): 文件“D:/exec/Apache24/htdocs/wsgi/api_test_2.wsgi”,第 3 行,在 从 api_test_2 导入应用程序作为应用程序 文件“D:/exec/wsgi_api/api_test_2\api_test_2.py”,第 2 行,在 导入 numpy 文件“c:\python\python36\lib\site-packages\numpy\__init__.py”,第 142 行,在 从 。导入核心 文件“c:\python\python36\lib\site-packages\numpy\core\__init__.py”,第 16 行,在 从 。导入多数组 文件“c:\python\python36\lib\site-packages\numpy\core\multiarray.py”,第 12 行,在 从 。导入覆盖 文件“c:\python\python36\lib\site-packages\numpy\core\overrides.py”,第 46 行,在 """) RuntimeError: implement_array_function 方法已经有一个文档字符串

#---------------------------------
# file : D:/exec/wsgi_api/api_test_1/api_test_1.py    
#---------------------------------
from flask import Flask, jsonify,render_template, request, make_response
import numpy
app = Flask(__name__)
@app.route('/')
def home():
    resp = make_response("hello from 1", 200)
    resp.headers['Content-Type'] = 'charset=utf-8'
    return resp
#---------------------------------        

#---------------------------------
# file : D:/exec/wsgi_api/api_test_2/api_test_2.py    
#---------------------------------
from flask import Flask, jsonify,render_template, request, make_response
import numpy
app = Flask(__name__)    
@app.route('/')
def home():
    resp = make_response("hello from 2", 200)
    resp.headers['Content-Type'] = 'charset=utf-8'
    return resp
if __name__ == '__main__':
    app.run(host='127.0.0.1', port=36000)
#---------------------------------

我在 appache httpdocs 中有这两个 wsgi 文件

#---------------------------------
# file : D:/exec/Apache24/htdocs/wsgi/api_test_1.wsgi
#---------------------------------
import sys 
sys.path.append('D:/exec/wsgi_api/api_test_1/') 
from api_test_1 import app as application
#---------------------------------


#---------------------------------
# file : D:/exec/Apache24/htdocs/wsgi/api_test_2.wsgi
#---------------------------------
import sys 
sys.path.append('D:/exec/wsgi_api/api_test_1/') 
from api_test_1 import app as application
#---------------------------------


#---------------------------------
In D:/exec/Apache24/conf/httpd.conf i add the line
#---------------------------------
WSGIScriptAlias /api_test_1 "D:/exec/Apache24/htdocs/wsgi/api_test_1.wsgi"
WSGIScriptAlias /api_test_2 "D:/exec/Apache24/htdocs/wsgi/api_test_2.wsgi"
#---------------------------------

【问题讨论】:

【参考方案1】:

我在一个项目中遇到了类似的问题。就我而言,我必须在我网站的 .conf 文件中添加 WSGIApplicationGroup %GLOBAL

这是我找到信息的文档:https://modwsgi.readthedocs.io/en/develop/user-guides/checking-your-installation.html#sub-interpreter-being-used

【讨论】:

.conf具体指的是什么文件,能否提供完整路径。谢谢! 如果你的意思是 httpd.conf 我到底需要在哪里添加它,我的意思是哪个部分。 @lorenzo,我被困在这里 3 天。非常感谢。【参考方案2】:

我在 mod_wsgi 邮件列表上进行了讨论,我得到了相同的响应解释是 numpy 在 Python 子解释器中不起作用,因为 C 扩展模块没有正确实现以允许这样做,因此对于 mod_wsgi,您只能使用主解释器上下文中的 numpy,由 'WSGIApplicationGroup %GLOBAL' 指令强制

这与主题https://github.com/numpy/numpy/issues/3961相关联

【讨论】:

【参考方案3】:

试着把它放在你的 WSGI 配置文件中:

single-interpreter = true

【讨论】:

linux上的问题是一样的。【参考方案4】:

这对我有用

我将 WSGIApplicationGroup %GLOBAL 添加到 apache 配置文件中,该文件位于启用站点的文件夹中。

【讨论】:

以上是关于在 Windows 上使用 apache mod_wsgi 运行烧瓶应用程序时的导入冲突的主要内容,如果未能解决你的问题,请参考以下文章

Windows环境下使用Apache+mod

Apache + mod_wsgi部署webpy应用

使用 mod_wsgi 和 WinSCP 在 Apache 服务器上部署 Flask 应用程序

在windows上用apache+mod_wsgi服务部署django项目

在 Windows 64 位上使用 python 2.7 安装 mod_wsgi

如何在 Windows 上为 apache 2.4 和 python 3.4 安装 mod_wsgi?