在Windows上使用Apache mod_wsgi运行Flask应用程序时发生导入冲突

时间:2019-02-05 15:29:41

标签: python flask mod-wsgi

我可以问你一个关于在Windows上移植mod_wsgi的托管烧瓶应用程序的问题

我有两个烧瓶应用程序,由于导入冲突,一个只能同时存活一次

即: 如果有申请1我有回应 然后,如果我请求应用程序2,我有内部服务器错误,日志中有错误... 然后,如果我重新启动apache并请求应用程序2,我将收到响应,但是如果我请求应用程序1,我将具有相同的内部服务器错误 如果我评论一些导入,例如numpy,则两个应用程序都可以同时存在

如果您对这个问题有任何想法,链接或答案,对您有帮助吗?

我的安装说明如下

提前感谢您的游览时间和您的作品

亚历山大(Alexandre)

错误日志
    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行             来自。导入核心
        
中的第16行的文件“ c:\ python \ python36 \ lib \ site-packages \ numpy \ core \ __ init__.py”             来自。导入多数组
        
中的文件“ 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"
#---------------------------------

4 个答案:

答案 0 :(得分:1)

非常感谢您的回复。

我在mod_wsgi邮件列表上进行了讨论,并且得到了相同的答复。解释是numpy在Python子解释器中不起作用,因为C扩展模块无法正确实现,因此对于mod_wsgi,您只能使用在主要解释程序上下文中为numpy,由“ WSGIApplicationGroup%{GLOBAL}”指令强制执行

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

相关联

感谢所有帮助我的人,特别是科迪·格雷和格雷厄姆·邓普尔顿

亲切问候

Alx

答案 1 :(得分:0)

尝试将其放入您的WSGI配置文件中:

single-interpreter = true

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

这对我有用

我在apache配置文件中添加了WSGIApplicationGroup%{GLOBAL},该文件位于启用了站点的文件夹中。