相对导入,没有已知的父包Gunicorn

时间:2019-09-08 09:13:08

标签: python flask gunicorn

我有一个烧瓶项目。当它在localhost上并且我使用export FLASK_APP=:appflask run时,它工作得很好,但是现在,在服务器上我想使用gunicorn进行部署。我遇到很多错误,但最重要的是

from .models import User
ImportError: attempted relative import with no known parent package

这是我的__init__.py

# __init__.py
from flask import Flask, render_template
from htmlmin.minify import html_minify
from flask_login import LoginManager
from flask_sqlalchemy import SQLAlchemy
import atexit
from apscheduler.schedulers.background import BackgroundScheduler
import os
import shutil
import datetime


# init SQLAlchemy so we can use it later in our models
db = SQLAlchemy()
upload_folder = ''
today = datetime.datetime.now().date()


def app():
    global upload_folder
    app = Flask(__name__, static_url_path='/static')

    app.config['SECRET_KEY'] = 'key'
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql_URI'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    app.config['ENV'] = 'development'
    app.config['UPLOAD_FOLDER'] = 'static/uploads/'
    upload_folder = app.config['UPLOAD_FOLDER']
    db.init_app(app)

    login_manager = LoginManager()
    login_manager.login_view = 'auth.login'
    login_manager.init_app(app)

    from .models import User

    @login_manager.user_loader
    def load_user(user_id):
        return User.query.get(int(user_id))

    # blueprint for auth routes in our app
    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint)

    # blueprint for non-auth parts of app
    from .main import app as main_blueprint
    app.register_blueprint(main_blueprint)

    # Service Worker
    @app.route('/sw.js', methods=['GET'])
    def serve_sw():
        return app.send_static_file('sw.js')

    # Handling Errors
    @app.errorhandler(405)
    def method_not_allowed(e):
        html = render_template('errors/405.html')
        return html_minify(html), 405

    @app.errorhandler(404)
    def page_not_found(e):
        html = render_template('errors/404.html')
        return html_minify(html), 404
    return app


def cleanup():
    paths = [
        os.path.join(upload_folder, 'optimize'),
        os.path.join(upload_folder, 'img-download')
    ]
    for folder in paths:
        for file in os.listdir(folder):
            try:
                # some code
            except Exception as e:
                print("Error deleting file or folder:")
                print(e)


cron = BackgroundScheduler()
cron.add_job(func=cleanup, trigger="interval", seconds=43200)
cron.start()
atexit.register(lambda: cron.shutdown())

如果我从from .models import User更改为from models import User,此问题就解决了,直到他从models.py返回另一个我有from . import db的地方为止。

我该怎么办?还是可以使用另一个WSGI来避免这些问题?

0 个答案:

没有答案