Import Error: No module named Flask

Import Error: No module named Flask

当 运行 我的服务器使用 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

有什么解决方法的建议吗?

FlaskApp.conf 文件在 etc/apache2/sites-available

<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。我该如何解决?

mod_wsgi 可能不知道你的 virtualenv,只需要被告知使用它而不是默认的系统环境。

Django 文档中的

This info 应该有所帮助。

如果没有,请 post 您的 flaskapp.wsgihttpd.conf 文件。

我想我终于解决了! 我将以下代码行添加到位于 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 不工作。

我将 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