【Flask】MySQLへ接続しTableを作成後、flask runするとModuleNotFoundError: No module named 'flask_sqlalchemy'が出てしまいます。
解決したいこと
Flaskを使用して管理画面を作成したいと考えております。
FlaskからMySQLに接続し、SQLAlchemyを使用して、テーブルの作成を行いました。
下記サイトを参考に実装しました。
その後、flask runを実行し、Web上で確認した際にInternalServerErrorが出てしまいます。
下記エラーログになります。
発生している問題・エラー
Traceback (most recent call last):
File "/var/www/skip/app.py", line 2, in <module>
from skip.database import init_db
ModuleNotFoundError: No module named 'skip'
unable to load app 0 (mountpoint='') (callable not found or import error)
階層構造
app/
└ run.py
└ skip/
└ app.py
└ database.py
└ config.py
└ models/
└ __ init__.py
└ models.py
環境
・CentOS7
・Python:3.6
・Flask:2.0.2
・Flask-SQLAlchemy:2.5.1
・SQLAlchemy:1.4.27
・Flask-Migrate:3.1.0
該当するソースコード
from skip.app import app
if __name__ == '__main__':
app.run()
from flask import Flask, render_template
from skip.database import init_db
import skip.models
def create_app():
app = Flask(__name__)
app.config.from_object('skip.config.Config')
init_db(app)
return app
app = create_app()
@app.route('/')
def home():
title = "管理画面"
return render_template('index.html', title=title)
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
# FlaskがSQLAlchemyを使えるように初期化
db = SQLAlchemy()
def init_db(app):
db.init_app(app)
Migrate(app, db)
import os
class SystemConfig:
# Flask
DEBUG = True
# DBの接続情報を設定
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{user}:{password}@{host}/skip?charset=utf8'.format(**{
'user': os.getenv('DB_USER', 'root'),
'password': os.getenv('DB_PASSWORD', 'xxxx_xxxx'),
'host': os.getenv('DB_HOST', '127.0.0.1'),
})
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = False
Config = SystemConfig
from skip.database import db
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
nickname = db.Column(db.String(30), unique=True, nullable=True)
email = db.Column(db.String(300), unique=True, nullable=True)
password = db.Column(db.Text, nullable=True)
first_name = db.Column(db.String(30), nullable=True)
last_name = db.Column(db.String(30), nullable=True)
from .models import User
__all__ = [
User,
]
自分で試したこと
エラーログから、app.pyの「from skip.database」という指定が原因なのかと思い、
「from database」という指定に変更したところ、下記エラーログに変わりました。
Traceback (most recent call last):
File "/var/www/skip/app.py", line 2, in <module>
from database import init_db
File "./database.py", line 1, in <module>
from flask_sqlalchemy import SQLAlchemy
ModuleNotFoundError: No module named 'flask_sqlalchemy'
unable to load app 0 (mountpoint='') (callable not found or import error)
ただ、flask_sqlalchemyはpipにてインストール出来ており、何が原因なのか分からない状況です。
flask_sqlalchemyが現在動いているPythonではなく別のPythonにインストールされているのかと思い、現在動いているPythonのフルパスを調べたところ、「/usr/bin/python3」でした。
そこで、下記を実行してみたのですが、エラー解消とはなりませんでした。
こちらはコードに原因があるのでしょうか?それとも環境に原因があるのでしょうか?
お分かりの方がいらっしゃいましたらご教授頂けますと幸いです。
/aaa/bbb/ccc/python -m pip install Flask-SQLAlchemy
その他に必要な情報がありましたら提示いたします。
よろしくお願いいたします。