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.wsgi
和 httpd.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
当 运行 我的服务器使用 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,只需要被告知使用它而不是默认的系统环境。
This info 应该有所帮助。
如果没有,请 post 您的 flaskapp.wsgi
和 httpd.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