I am using python 3.7 environments, flask framework and with the latest ckeditor 5 and I actually run it smoothly without any error in localhost with this command: python script.py. But when it comes to the gunicorn configuration, gunicorn --bind 0.0.0.0:5000 wsgi:app I'm having this error: "from flask_ckeditor import CKEditor, CKEditorField ImportError: No module named flask_ckeditor" I really don't know what to do, I hope somebody will help me.
Here is the code:
import os
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import create_engine, Column, Integer, String, Sequence
from sqlalchemy.ext.declarative import declarative_base
from flask import Flask
import hashlib
from flask_wtf import FlaskForm
from flask_wtf import Form
from wtforms import StringField, PasswordField, BooleanField
from wtforms.validators import InputRequired, Email, Length
from flask_bootstrap import Bootstrap
from flask_jwt_extended import JWTManager
from flask_ckeditor import CKEditor, CKEditorField
db = SQLAlchemy()
jwt = JWTManager()
ckeditor = CKEditor()
def create_app(config_type): # dev, test, prod
# create flask instance
app = Flask(__name__)
app.config['CKEDITOR_SERVE_LOCAL'] = True
app.config['CKEDITOR_HEIGHT'] = '800px'
app.config['CKEDITOR_WIDTH'] = '800px'
ckeditor.init_app(app)
#app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:postgres@localhost/catalog_db'
# setup configuration
configuration = os.path.join(os.getcwd(), 'config', config_type + '.py')
# load configuration from file
app.config.from_pyfile(configuration)
# attach flask to db instance(SQLALCHEMY)
db.init_app(app)
#attach flask to jwt
jwt.init_app(app)
Bootstrap(app)
# import blueprints
# inside app thats why app.catalog
from sales_tracking.api import api
from sales_tracking.api.get_api import get_api
from sales_tracking.api.get_api.get_all import get_all
from sales_tracking.api.post_api import post_api
from sales_tracking.api.post_api.authentications import authentications
from sales_tracking.api.post_api.bad_orders import bad_orders
from sales_tracking.api.post_api.box import box
from sales_tracking.api.post_api.breaktime import breaktime
from sales_tracking.api.post_api.change_dayoff import change_dayoff
from sales_tracking.api.post_api.check_in import check_in
from sales_tracking.api.post_api.check_in_monitoring import check_in_monitoring
from sales_tracking.api.post_api.competitors_act import competitors_act
from sales_tracking.api.post_api.competitors_promotion import competitors_promotion
from sales_tracking.api.post_api.confirmation_promotion_store import confirmation_promotion_store
from sales_tracking.api.post_api.confirmation_change_dayoff import confirmation_change_dayoff
from sales_tracking.api.post_api.confirmation_leave import confirmation_leave
from sales_tracking.api.post_api.confirmation_overtime import confirmation_overtime
from sales_tracking.api.post_api.daily_stocks import daily_stocks
from sales_tracking.api.post_api.facings import facings
from sales_tracking.api.post_api.leave import leave
from sales_tracking.api.post_api.logs_folder import logs_folder
from sales_tracking.api.post_api.mcp import mcp
from sales_tracking.api.post_api.mcp_adjustment import mcp_adjustment
from sales_tracking.api.post_api.nex import nex
from sales_tracking.api.post_api.planograms import planograms
from sales_tracking.api.post_api.product_discrepancy import product_discrepancy
from sales_tracking.api.post_api.confirmation_product_discrepancy import confirmation_product_discrepancy
from sales_tracking.api.post_api.promotions import promotions
from sales_tracking.api.post_api.request_overtime import request_overtime
from sales_tracking.api.post_api.rtv_pullout_and_create import rtv_pullout_and_create
from sales_tracking.api.post_api.shelf_availability import shelf_availability
from sales_tracking.api.post_api.stock_transfer import stock_transfer
from sales_tracking.api.post_api.tc import tc
from sales_tracking.api.post_api.tcp import tcp
from sales_tracking.api.post_api.team_attendance import team_attendance
from sales_tracking.api.post_api.update_position import update_position
from sales_tracking.api.post_api.sync_all import sync_all
from sales_tracking.web import web_initials
#reegister blueprint
app.register_blueprint(api)
app.register_blueprint(get_api)
app.register_blueprint(get_all)
app.register_blueprint(post_api)
app.register_blueprint(bad_orders)
app.register_blueprint(authentications)
app.register_blueprint(box)
app.register_blueprint(breaktime)
app.register_blueprint(change_dayoff)
app.register_blueprint(check_in)
app.register_blueprint(check_in_monitoring)
app.register_blueprint(competitors_act)
app.register_blueprint(competitors_promotion)
app.register_blueprint(confirmation_promotion_store)
app.register_blueprint(confirmation_change_dayoff)
app.register_blueprint(confirmation_leave)
app.register_blueprint(confirmation_overtime)
app.register_blueprint(daily_stocks)
app.register_blueprint(facings)
app.register_blueprint(leave)
app.register_blueprint(logs_folder)
app.register_blueprint(mcp)
app.register_blueprint(mcp_adjustment)
app.register_blueprint(nex)
app.register_blueprint(planograms)
app.register_blueprint(product_discrepancy)
app.register_blueprint(promotions)
app.register_blueprint(request_overtime)
app.register_blueprint(rtv_pullout_and_create)
app.register_blueprint(shelf_availability)
app.register_blueprint(stock_transfer)
app.register_blueprint(tc)
app.register_blueprint(tcp)
app.register_blueprint(team_attendance)
app.register_blueprint(update_position)
app.register_blueprint(web_initials)
app.register_blueprint(confirmation_product_discrepancy)
app.register_blueprint(sync_all)
return app
For anybody else having this kind weird issues. Please use python env while pip installing, that might fix the issue.
There is really good blog post by one of python core developers why you should use python -m pip
instead of pip
read about it here.