我有一个烧瓶项目。当它在localhost上并且我使用export FLASK_APP=:app
,flask 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来避免这些问题?