首页 > 解决方案 > `Flask run` 完美运行,(FLASK_APP=main.py)但 'python main.py' 产生错误

问题描述

当我键入Flask run运行我的应用程序时,一切都按预期运行。Dotenv 集FLASK_APP=zigweb/main.py. 但是,如果我转到zigweb文件夹并键入,python main.py我会收到导入错误。我正在使用 pycharm 进行开发,我已将我的项目分离为服务器、电报机器人和烧瓶应用程序,以便我可以进行 dockerise。

结果flask run

 * Serving Flask app "zigweb/main.py" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 264-034-887
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

结果python main.py

Traceback (most recent call last):
  File "main.py", line 3, in <module>
    from .app import app, db, signal_saved
ModuleNotFoundError: No module named '__main__.app'; '__main__' is not a package


主文件

#!/usr/bin/env python3
import os
from .app import app, db, signal_saved
from .app.models import User, Signal
from .app.functions import btc_to_satoshi
import pickle
from .pricedata import start_price_check
from dotenv import load_dotenv
load_dotenv()

@app.shell_context_processor
def make_shell_context():
    return {'db': db, 'User': User, 'Signal': Signal}


@app.context_processor
def satoshis():
    return dict(satoshis=btc_to_satoshi)


def some_func(signal):
    query = Signal.query.all()
    with open('.\\zigweb\signals.pickle', 'wb') as f:
        pickle.dump(query, f, pickle.HIGHEST_PROTOCOL)
        app.logger.info(f'Pickled object to {f}')


signal_saved.connect(some_func)


if __name__ == '__main__':
    app.run()
    start_price_check()


项目结构:

zigbot
  nginx
  zigbot (not flask)
      app
         scripts.py
      main.py
  zigweb (flask)
      app
        models.py
        __init__.py
        etc
      main.py
      some-other-scripts.py

如果我更改 main.py 以解决导入错误,我不明白flask run如果它以python main.py. 无论如何,如果我通过删除“。”来解决导入错误。来自.appPycharm 然后红色下划线这些导入,但它几乎运行。

 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Restarting with stat
C:\Users\phill\Anaconda3\envs\zigbot\python.exe: can't open file 'C:\Users\phill\PycharmProjects\zigbot\main.py': [Errno 2] No such file or directory

更新 2 如果我关闭调试,服务器会通过运行正确运行,python main.py但如果调试设置为 1,则会产生 ABOVE 错误。

标签: pythonflaskenvironment-variables

解决方案


推荐阅读