导入错误:没有名为Flask的模块

时间:2015-01-26 03:40:55

标签: python-3.x flask apache2 wsgi

使用Flask,apache2和Python 3.4.2运行服务器时出现500内部服务器错误。

起初我在没有创建虚拟环境的情况下安装了Flask,所以我认为这可能是一个原因。但是,我后来使用以下方法为我的应用程序创建了虚拟环境:

python3.4 -m venv venv
source venv/bin/activate
(venv) pip3 install Flask

我通过使用python3 __ init.py 运行我的应用进行检查,它正在本地工作。 然后我重新加载了我的apache2服务器,仍然得到了同样的错误。请参阅以下错误日志文件的输出:

mod_wsgi (pid=25667): Target WSGI script '/var/www/FlaskApp/flaskapp.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=25667): Exception occurred processing WSGI script '/var/www/FlaskApp/flaskapp.wsgi'.
Traceback (most recent call last):
File "/var/www/FlaskApp/flaskapp.wsgi", line 11, in <module>
from XYZ import app as application
File "/var/www/FlaskApp/XYZ/__init__.py", line 1, in <module>
from flask import Flask, render_template
ImportError: No module named flask

有任何建议如何解决?

etc / apache2 / sites-available

中的FlaskApp.conf文件

<VirtualHost *:80>

ServerName xyz.com

ServerAlias www.xyz.com

ServerAdmin contact@xyz.com
WSGIScriptAlias / /var/www/FlaskApp/flaskapp.wsgi
<Directory /var/www/FlaskApp/XYZ/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/FlaskApp/XYZ/static
<Directory /var/www/FlaskApp/XYZ/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

来自apache2错误日志文件的行:

AH00489: Apache/2.4.10 (Ubuntu) mod_wsgi/3.5 Python/2.7.8 configured -- resuming normal operations

看起来mod_wsgi试图使用2.7.8而不是3.4。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

我将xx.wsgi从使用execfile()更改为使用exec()。这是它最终工作时的样子。

activate_this = '/opt/flask/project_name/py3venv/bin/activate_this.py'
exec(open(activate_this).read(), dict(__file__=activate_this))

import sys
sys.path.insert(0, '/opt/flask/project_name')

from project_app_name import app as application

答案 1 :(得分:1)

我想我终于解决了! 我将以下代码行添加到位于etc / apache2 / sites-available中的FlaskApp.conf文件中:

WSGIPythonPath /var/www/FlaskApp/XYZ/venv/:/var/www/FlaskApp/XYZ/venv/lib/python3.4/site-packages

此行应该先于VirtualHost!

然后我重新启动了apache并让我的网站工作,除了只有www,非www不起作用。

答案 2 :(得分:0)

mod_wsgi可能不了解你的virtualenv,只需告诉你使用它而不是默认的系统环境。

Django文档中的

This info应该有所帮助。

如果没有,请发布您的flaskapp.wsgihttpd.conf个文件。