Flask运行错误python,在虚拟环境中没有名为flask的模块

时间:2019-07-20 12:25:37

标签: python flask

道歉,一直在寻找这个问题的答案,见过有类似问题的人,但到目前为止还没有运气解决这个问题。

我正在尝试在安装了Flask的虚拟环境(venv)下建立一个简单的Flask应用程序。我的主目录simple_app/下有一个文件夹,其中有一个文件__init__.py,其内容为:

    from flask import Flask

    def create_app():
        app = Flask(__name__)

        @app.route('/')
        def mainPage():
            return 'Hi!'

        return app

    # to try and run app from script
    if __name__ == '__main__':
        app = create_app()
        app.run()

我有通过.env指定的FLASK_APP和FLASK_ENV。如果我尝试flask run,将得到以下输出:

 $ flask run
 * Serving Flask app "simple_app" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Restarting with stat
 ...\venv\scripts\python.exe No module named ...venv\Scripts\flask

我可以插入print()条语句,并且这些错误的输出将显示出来。

但是,如果我运行python simple_app/__init__.py,则我的应用程序可以正常运行(与"__init__"一样)。

另外,如果我运行flask routes,我会看到

$ flask routes
Endpoint  Methods  Rule
--------  -------  -----------------------
mainPage  GET      /
static    GET      /static/<path:filename>

以便Flask似乎确实了解我的应用。

我以前使用这种类型的结构没有问题,因此尽管我对Flask还是很陌生,所以不太确定这里出了什么问题。

非常感谢任何人都可以提供的帮助!

1 个答案:

答案 0 :(得分:0)

我看不到您的设置有任何问题。我刚刚创建了完全相同的应用程序,并具有相同的环境(据我所知),并且一切正常。您尚未指定要使用的Python版本,因此这里是我采取的全套步骤(也许您可以发现自己错过的东西):

  • 使用的Python 3.7.4
  • 使用python -m venv venv创建的虚拟环境
  • 使用source venv/bin/activate激活的虚拟环境
  • 装有pip install Flask的烧瓶
  • 在下面创建了文件夹结构,并将您的代码复制到一个文件中
  • 运行以下命令:
export FLASK_APP=simple_app`
export FLASK_ENV=development`
flask run

这导致该应用程序按预期运行。

只有一个.py文件的文件夹结构如下:

.
└── simple_app
    └── __init__.py

该.py文件的内容与您所说的完全相同:

__init__.py

from flask import Flask

def create_app():
    app = Flask(__name__)

    @app.route('/')
    def mainPage():
        return 'Hi!'

    return app

# to try and run app from script
if __name__ == '__main__':
    app = create_app()
    app.run()
$ flask run
 * Serving Flask app "simple_app" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: [snip]