Flask - WSGI - 没有名为“flask”的模块

Posted

技术标签:

【中文标题】Flask - WSGI - 没有名为“flask”的模块【英文标题】:Flask - WSGI - No module named 'flask' 【发布时间】:2017-06-22 09:40:16 【问题描述】:

我一直在关注 Sentdex 的 Flask 教程。他正在使用 Venv 来设置他的 Flask,但没有设置他的 Python 来使用 Venv。我已经尝试在全球范围内安装 Flask - 但它仍然无法正常工作。尝试浏览到服务器返回 500 内部服务器错误

我收到的是通常的no module named flaskerror。

errorFGL.log

[Sun Feb 05 11:22:32.043925 2017] [wsgi:error] [pid 26340:tid 118578538694400] [client 86.52.205.25:49814] mod_wsgi (pid=26340): Target WSGI script '/var/www-fgl/FlaskApp/flaskapp.wsgi' cannot be loaded as Python module.
[Sun Feb 05 11:22:32.044105 2017] [wsgi:error] [pid 26340:tid 118578538694400] [client 86.52.205.25:49814] mod_wsgi (pid=26340): Exception occurred processing WSGI script '/var/www-fgl/FlaskApp/flaskapp.wsgi'.
[Sun Feb 05 11:22:32.044243 2017] [wsgi:error] [pid 26340:tid 118578538694400] [client 86.52.205.25:49814] Traceback (most recent call last):
[Sun Feb 05 11:22:32.045011 2017] [wsgi:error] [pid 26340:tid 118578538694400] [client 86.52.205.25:49814]   File "/var/www-fgl/FlaskApp/flaskapp.wsgi", line 8, in <module>
[Sun Feb 05 11:22:32.045070 2017] [wsgi:error] [pid 26340:tid 118578538694400] [client 86.52.205.25:49814]     from FlaskApp import app as application
[Sun Feb 05 11:22:32.045549 2017] [wsgi:error] [pid 26340:tid 118578538694400] [client 86.52.205.25:49814]   File "/var/www-fgl/FlaskApp/FlaskApp/__init__.py", line 1, in <module>
[Sun Feb 05 11:22:32.045594 2017] [wsgi:error] [pid 26340:tid 118578538694400] [client 86.52.205.25:49814]     from flask import Flask
[Sun Feb 05 11:22:32.045689 2017] [wsgi:error] [pid 26340:tid 118578538694400] [client 86.52.205.25:49814] ImportError: No module named 'flask'

__init__.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def homepage():
    return "Success"

if __name__ == "__main__":
    app.run()

flaskapp.wsgi

#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)

sys.path.insert(0,"/var/www-fgl/FlaskApp/")

from FlaskApp import app as application
application.secret_key = '[REDACTED]'

fgl-database.conf

<VirtualHost *:80>
        ServerName [REDACTED]
        WSGIScriptAlias / /var/www-fgl/FlaskApp/flaskapp.wsgi
        <Directory /var/www-fgl>
            Require all granted
        </Directory>
        Alias /static /var/www-fgl/FlaskApp/FlaskApp/static
        <Directory /var/www-fgl/FlaskApp/FlaskApp/static/>
            Require all granted
        </Directory>
        ErrorLog $APACHE_LOG_DIR/errorFGL.log
        LogLevel warn
        CustomLog $APACHE_LOG_DIR/accessFGL.log combined




</VirtualHost>

【问题讨论】:

如果你全局安装了 Flask,那么 mod_wsgi 很可能被编译为不同的 Python 版本。对于 Python 虚拟环境,您需要告诉 mod_wsgi 它在哪里。见:modwsgi.readthedocs.io/en/develop/user-guides/… 【参考方案1】:

我浪费了大约 25 分钟来寻找解决方案,在遵循了我能找到的所有其他资源之后,我还做了以下事情:

sudo apt-get install libapache2-mod-wsgi-py3

确保在 libapache2-mod-wsgi-py3 的末尾添加“-py3”,否则运行时将默认为 Python2.7

来源:https://vishnut.me/blog/ec2-flask-apache-setup.html

【讨论】:

这比尝试让 mod_wsgi 找到虚拟环境要容易得多。【参考方案2】:

作为找到解决方案时的礼貌行为,我在 Google 上搜索了更多,并设法从 Nathan Nichols 的 YouTube 评论中找到了解决方案:

https://www.digitalocean.com/community/tutorials/how-to-run-django-with-mod_wsgi-and-apache-with-a-virtualenv-python-environment-on-a-debian-vps

    编辑/etc/apache2/sites-available/FlaskApp.conf

    在“WSGIScriptAlias”行之前添加以下两行:

    WSGIDaemonProcess FlaskApp python-path=/var/www/FlaskApp:/var/www/FlaskApp/FlaskApp/venv/lib/python2.7/site-packages
    WSGIProcessGroup FlaskApp
    
    使用“service apache2 restart”重启 Apache

我当然用python3.5替换了Python版本,这就是我正在运行的。

【讨论】:

不要使用python-path来设置Python虚拟环境的位置。阅读我已经在问题评论中提供的关于设置 Python 虚拟环境的 mod_wsgi 文档。请改用python-home。见:modwsgi.readthedocs.io/en/develop/user-guides/…【参考方案3】:

首先安装python-virtualenv

然后从放置 wigs python 文件的 Flask app 目录运行

virtualenv env

这将在 Flask 目录中创建 env 目录并包含本地 python 安装。

接下来通过这个命令source env/bin/activate激活虚拟环境

激活虚拟环境后运行pip install flask

运行pip --version

你会看到这样的东西

来自 /var/www/html/flaskapp/env/local/lib/python2.7/site-packages/pip (python 2.7) 的 pip 19.0.3

复制这个python路径

 WSGIDaemonProcess FlaskApp python-path=/var/www/html/flaskapp:/var/www/html/flaskapp/env/local/lib/python2.7/site-packages
WSGIProcessGroup FlaskApp

在 apache 的 sites-available 目录中的 FlaskApp.conf 中添加以上行

注意把 python-path 放在运行 pip --version 后得到的内容

【讨论】:

【参考方案4】:

没有什么对我有用,但我只是在我的 .py 和 .wsgi 文件的开头添加以下行,瞧,它起作用了:

import sys
sys.path.append('/home/ubuntu/pythonVirtual/lib/python3.6/site-packages)

pythonVirtual 是我的 Python 虚拟目录

【讨论】:

这里也一样,可以添加 venv 的站点包!在 CentOS Linux 版本 7.9.2009 (Core)、Python 3.6.8 上运行。【参考方案5】:

    根据http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html.

    你应该编辑/etc/apache2/sites-available/FlaskApp.conf

    WSGIScriptAlias上方添加这些

    WSGIDaemonProcess FlaskApp python-home=/var/www/FlaskApp/FlaskApp/venv/FlaskApp WSGIProcessGroup FlaskApp

我遇到了同样的问题,顺便解决一下。

【讨论】:

【参考方案6】:

查看本页底部:https://flask.palletsprojects.com/en/1.1.x/deploying/mod_wsgi/#configuring-apache

是不是这样说的:

对于 Python 3,将以下行添加到 .wsgi 文件的顶部:

activate_this = '/path/to/env/bin/activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))

/path/to/env 是安装 Flask 的任何虚拟环境的路径,正如其他人在此线程中所述。此处描述的“python-path”和其他一些 VirtualHost 配置是不必要的。

【讨论】:

以上是关于Flask - WSGI - 没有名为“flask”的模块的主要内容,如果未能解决你的问题,请参考以下文章

《Flask Web 开发指南 pt.2》

01 flask源码剖析之werkzurg 了解wsgi

Flask 在 URL 中添加斜杠,没有路由匹配

将 Flask 应用程序导入 Elastic Beanstalk 错误:无法打开文件“mod_wsgi”:[Errno 2] 没有这样的文件或目录

python Python Flask WSGI路由技术#python #flask #wsgi

python Python Flask WSGI路由技术#python #flask #wsgi