Search code examples
pythonpython-3.xflaskckeditor

Python Flask Gunicorn Configuration says "from flask_ckeditor import CKEditor, CKEditorField ImportError: No module named flask_ckeditor"


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

Solution

  • 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.