我有一个 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 app
一样运行应用程序模块,
app/
将被添加到
sys.path
并成为您的导入基础。因此,您必须从导入中删除
app
。您的代码也必须从
__init__.py
中移出。一般来说,只有模块初始化代码应该放在那里。在你的情况下,你可以
import __init__
,但这不是最佳实践。