Python __main__.py 无法从其自己的模块导入

问题描述 投票:0回答:1

我有一个 Flask Web 应用程序,但当我从我自己的应用程序导入模块时,出现模块未找到错误

Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/Users/joey/projects/app/app/__main__.py", line 1, in <module> from app import serve ModuleNotFoundError: No module named 'app'
这里出了什么问题?我的

__main__.py

:

from app import serve serve()
我的

__init__.py

from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate app = Flask(__name__) class Config(object): UPLOAD_DIRECTORY = app.root_path + "/uploads/" SQLALCHEMY_DATABASE_URI = "postgresql:///app_db" SECRET_KEY = "secret key" app.config.from_object(Config) db = SQLAlchemy(app) migrate = Migrate(app, db) from .routes import home_page, download_page, upload_page, favicon_page app.register_blueprint(home_page) app.register_blueprint(download_page) app.register_blueprint(upload_page, url_prefix="/upload") app.register_blueprint(favicon_page) import app.routes as routes import app.models as models def serve(): return app.run(host="0.0.0.0", port=1212, debug=True)
还有我的文件树:

app ├── Dockerfile ├── LICENSE ├── README.md ├── requirements.txt ├── service_entrypoint.sh └── app ├── __init__.py ├── __main__.py ├── __pycache__ │   ├── __init__.cpython-312.pyc │   ├── __main__.cpython-312.pyc │   ├── app.cpython-312.pyc │   ├── models.cpython-312.pyc │   ├── routes.cpython-312.pyc │   └── utils.cpython-312.pyc ├── app.py ├── files.json ├── migrations │   ├── README │   ├── __pycache__ │   │   └── env.cpython-312.pyc │   ├── alembic.ini │   ├── env.py │   ├── script.py.mako │   └── versions │   ├── 660c5066c59c_files_table.py │   └── __pycache__ │   └── 660c5066c59c_files_table.cpython-312.pyc ├── models.py ├── routes.py ├── static │   └── images │   ├── favicon-32x32.png │   ├── favicon.ico │   └── upload.png ├── templates │   ├── base.html │   ├── download.html │   ├── index.html │   ├── upload.html │   └── upload_sucess.html ├── uploads │   ├── 13879f7a_routes.py │   ├── 9bd5c043_files.json │   ├── b5459a5d_models.py │   └── file.txt └── utils.py
我在这里做错了什么吗?我将不胜感激任何帮助。感谢您查看这个问题。

python flask
1个回答
0
投票
如果您像

python app

一样运行应用程序模块,
app/
将被添加到
sys.path
并成为您的导入基础。

因此,您必须从导入中删除

app

您的代码也必须从

__init__.py

 中移出。一般来说,只有模块初始化代码应该放在那里。在你的情况下,你
可以import __init__
,但这不是最佳实践。

© www.soinside.com 2019 - 2024. All rights reserved.