当前位置: 首页 > 面试题库 >

Flask,mod_wsgi和Apache:ImportError

公冶桐
2023-03-14
问题内容

我在我的错误日志中得到了这个:

ImportError:没有名为flask的模块

它看起来完全像在Django + mod_wsgi + apache中:ImportError at /没有名为djproj.urls的模块,但是我尝试了该解决方案,但它似乎不起作用…我正确地将应用程序home和parent文件夹插入到系统路径,但此错误仍然出现。

导航到我的页面仍会弹出500页。

更多信息:我正在使用Amazon EC2免费套餐,并以httpd的形式使用Apache。一切都已正确安装,我敢肯定…

这是我的东西(应用程序名称badassery和应用程序主文件夹名称hatemail-我改变主意了):

错误日志

[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] mod_wsgi (pid=28143): Target WSGI script '/home/ec2-user/hatemail/badassery.wsgi' cannot be loaded as Python module.
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] mod_wsgi (pid=28143): Exception occurred processing WSGI script '/home/ec2-user/hatemail/badassery.wsgi'.
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] Traceback (most recent call last):
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]   File "/home/ec2-user/hatemail/badassery.wsgi", line 6, in <module>
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]     from badassery import app as application
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]   File "/home/ec2-user/hatemail/badassery.py", line 6, in <module>
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]     from flask import Flask, request, session, url_for, redirect, render_template, abort, g, flash, _app_ctx_stack
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] ImportError: No module named flask
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] mod_wsgi (pid=28143): Target WSGI script '/home/ec2-user/hatemail/badassery.wsgi' cannot be loaded as Python module.
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] mod_wsgi (pid=28143): Exception occurred processing WSGI script '/home/ec2-user/hatemail/badassery.wsgi'.
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] Traceback (most recent call last):
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]   File "/home/ec2-user/hatemail/badassery.wsgi", line 6, in <module>
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]     from badassery import app as application
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]   File "/home/ec2-user/hatemail/badassery.py", line 6, in <module>
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148]     from flask import Flask, request, session, url_for, redirect, render_template, abort, g, flash, _app_ctx_stack
[Sun Nov 11 07:14:45 2012] [error] [client 18.189.71.148] ImportError: No module named flask
badassery.wsgi
import sys

sys.path.insert(0,'/home/ec2-user/hatemail')
sys.path.insert(1,'/home/ec2-user')

from badassery import app as application

httpd.conf文件的补充

WSGISocketPrefix /var/run/wsgi

<VirtualHost *:80>
        ServerName 54.243.61.41
        DocumentRoot "/home/ec2-user/hatemail"

        WSGIDaemonProcess badassery user=apache group=apache processes=1 threads=5
        WSGIScriptAlias / /home/ec2-user/hatemail/badassery.wsgi
        WSGIScriptReloading On

        <Directory /home/ec2-user/hatemail>
                WSGIProcessGroup badassery
                WSGIApplicationGroup %{GLOBAL}
                Order deny,allow
                Allow from all
        </Directory>
</VirtualHost>

目录结构

~
    hatemail
        badassery.py
        badassery.wsgi
        Procfile
        README
        requirements.txt
        schema.sql
        static/
        templates/
        venv/bin/activate

是的,我正在做“如果name ==’main’:app.run()”。

我该如何解决这个问题?


问题答案:

如果要部署virtualenv,则必须确保先激活它。你应该这样更新wsgi文件(更新值以匹配你的环境):

activate_this = '/path/to/virtualenv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this)

import sys
sys.path.insert(0, '/path/to/flask/appname')
sys.path.insert(0,'/home/ec2-user/hatemail')
sys.path.insert(1,'/home/ec2-user')

from badassery import app as application

如果你不部署virtualenv,则可能只需要确保系统上已安装Flask。如果已经安装setuptools,则可以:

easy_install flask


 类似资料:
  • 问题内容: 我已经运行了一个基本的“ hello world” Flask应用程序。 我在使用Apache 2.4的Ubuntu 14.04上。我已经安装了mod_wsgi。 我创建了一个以容纳安装了flask的virtualenv创建的Python2。 但是,我希望我的flaskapp导入我编写的Python3.x模块。 我需要怎么做才能做到这一点? 我尝试创建一个并修改 但是我认为这还不够。这

  • 问题内容: 我已经安装了Apache服务器,并且正在通过mod_wsgi处理Flask响应。我已经通过别名注册了WSGI脚本: [httpd.conf] 我在上面的路径中添加了相应的WSGI文件: [/mnt/www/wsgi-scripts/service.wsgi] 我有一个简单的Flask Python测试脚本,提供了服务模块: [/mnt/www/wsgi-scripts/service.

  • 本文向大家介绍CentOS7部署Flask(Apache、mod_wsgi、Python36、venv),包括了CentOS7部署Flask(Apache、mod_wsgi、Python36、venv)的使用技巧和注意事项,需要的朋友参考一下 一、安装Apache 防火墙开放80端口 开启Apache,外网已经可以通过ip访问Apache的默认页面了 二、安装Python36、pip3、virtu

  • 我正在尝试部署我构建的用于部署在Apache服务器上的Flask Web应用程序。我在Raspberry Pi 3上使用Raspbian(Jessie)OS。该应用程序在flask内置的开发Web服务器上运行完美,但我无法在Apache服务器上部署它。 这就是我所做的: conf文件为:etc/apach2/sites available/arduinoweb。形态: 中的WSGI脚本文件: Ap

  • 我有一个Flask应用程序在Apache下使用mod_wsgi运行。该应用程序需要做一些初始化,包括在接收任何请求之前设置一些需要在请求处理程序中访问的顶级变量。目前,此初始化代码只是请求处理方法之前的中的顶级语句: 应用程序的wsgi文件如下所示: 我注意到,在收到第一个请求之前,不会调用初始化代码。在收到任何请求之前,当mod_wsgi加载应用程序时,如何执行初始化代码?

  • 问题内容: 是否有任何聪明的解决方案将静态文件存储在Flask的应用程序根目录中。robots.txt和sitemap.xml有望在/中找到,所以我的想法是为它们创建路由: 必须有一些更方便的方法:) 问题答案: 最好的方法是将static_url_path设置为root url