python - `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
. 无论如何,如果我通过删除“。”来解决导入错误。来自.app
Pycharm 然后红色下划线这些导入,但它几乎运行。
* 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 错误。
解决方案
推荐阅读
- r - 如何使用 plotly 库将多列中的值绘制到旭日形图中?
- c - 如何使用 STM32F4 从 MAX30100 读取 FIFO 数据
- php - 来自主机名“localhost”而不是容器名的php容器的数据库连接
- javascript - 猫鼬模式方法和 .pre('save') 不起作用
- asp.net-mvc - 为什么我的 ASP.NET MVC 需要 DTC 来完成事务,而我的 WPF 应用程序使用相同的 .DLL 不需要?
- php - 为什么 Gulp 在 Laravel 6 的生产版本中不可用?
- javascript - rollup.js 如何在不更改源文件的情况下导入其他文件
- ios - iOS 中的可缩放图像
- yocto - 在 Yocto 中,如何将包 A 的版本限制指定为包 B 的当前版本?
- python - 将 Python XML 请求转换为 Pandas 数据框