[英]import error, when importing a function from another file
我在从文件导入函数时遇到问题,只是在这个文件中出现错误,如果我在其他文件上导入相同的函数,它会起作用,因为我已经在其他文件上使用它了。
--dev_ma
-__init__.py
-roles.py
-user.py
-audit.py
-active_directory.py
问题是当我在audit.py
时,如果我这样做: from dev_maintenance.roles import check_if_user_has_permissions
我得到一个错误:
Traceback (most recent call last):
File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/__init__.py", line 21, in <module>
import dev_maintenance.active_directory
File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/active_directory.py", line 6, in <module>
from dev_maintenance.audit import audit_action
File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/audit.py", line 5, in <module>
from dev_maintenance.roles import check_if_user_has_permissions
File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/roles.py", line 6, in <module>
from dev_maintenance.audit import audit_action
ImportError: cannot import name 'audit_action' from 'dev_maintenance.audit' (/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/audit.py)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/cli.py", line 325, in __call__
self._flush_bg_loading_exception()
File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/cli.py", line 313, in _flush_bg_loading_exception
reraise(*exc_info)
File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/cli.py", line 302, in _load_app
self._load_unlocked()
File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/cli.py", line 317, in _load_unlocked
self._app = rv = self.loader()
File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/cli.py", line 372, in load_app
app = locate_app(self, import_name, name)
File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/cli.py", line 242, in locate_app
'\n\n{tb}'.format(name=module_name, tb=traceback.format_exc())
flask.cli.NoAppException: While importing "dev_maintenance", an ImportError was raised:
Traceback (most recent call last):
File "/Users/pjose/Project/venv/lib/python3.7/site-packages/flask/cli.py", line 235, in locate_app
__import__(module_name)
File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/__init__.py", line 21, in <module>
import dev_maintenance.active_directory
File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/active_directory.py", line 6, in <module>
from dev_maintenance.audit import audit_action
File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/audit.py", line 5, in <module>
from dev_maintenance.roles import check_if_user_has_permissions
File "/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/roles.py", line 6, in <module>
from dev_maintenance.audit import audit_action
ImportError: cannot import name 'audit_action' from 'dev_maintenance.audit' (/Users/pjose/Project/dev_maintenance/backend/dev_maintenance/audit.py)
这是我的初始化文件:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
from flasgger import Swagger
from flask_caching import Cache
app = Flask(__name__)
app.debug = True
app.config.from_object('dev_maintenance.yaml_config_loader')
cache = Cache(app)
db = SQLAlchemy(app)
cors = CORS(app, resources={r"/*": {"origins": "*"}})
swagger = Swagger(app)
import dev_maintenance.mesos_callback
import dev_maintenance.db_model
import dev_maintenance.active_directory
import dev_maintenance.user_list
import dev_maintenance.audit
import dev_maintenance.machines
import dev_maintenance.yaml_config_loader
import dev_maintenance.roles
import dev_maintenance.user_details
if __name__ == '__main__':
app.run(debug=True)
这是我的审计文件:
from dev_maintenance import app, db
import json
from flask_jwt_extended import jwt_required
from dev_maintenance.db_model import ActionLog
from dev_maintenance.roles import check_if_user_has_permissions
def audit_action(user, action_type, action_parameters):
req = ActionLog(
user=user,
action_type=action_type,
action_parameters=action_parameters
)
db.session.add(req)
db.session.commit()
@app.route("/api/audit", methods=["GET"])
@jwt_required
def get_audit_log():
data = []
for run in db.session.query(ActionLog).order_by(ActionLog.date.desc()).limit(100):
run_tmp = {}
run_tmp["date"] = str(run.date)
run_tmp["user"] = run.user
run_tmp["action_type"] = run.action_type
run_tmp["action_parameters"] = run.action_parameters
data.append(run_tmp)
response = app.response_class(
response=json.dumps(data), status=200, mimetype="application/json"
)
return response
我无法弄清楚为什么会发生这种情况,不仅仅是这个函数,其他文件中的其他函数也会触发 audit.py 中的错误。
经过一段时间的搜索,我发现了这个问题,它被称为循环依赖。
基本上我需要在我的函数中进行导入:
@app.route("/api/audit", methods=["GET"])
@jwt_required
def get_audit_log():
from dev_maintenance.roles import check_if_user_has_permissions
data = []
user = get_jwt_identity()
permission = check_if_user_has_permissions(user=user, resource="audit", action="GET_INFO")
for run in db.session.query(ActionLog).order_by(ActionLog.date.desc()).limit(100):
run_tmp = {}
run_tmp["date"] = str(run.date)
run_tmp["user"] = run.user
run_tmp["action_type"] = run.action_type
run_tmp["action_parameters"] = run.action_parameters
data.append(run_tmp)
if permission:
response = app.response_class(
response=json.dumps(data), status=200, mimetype="application/json"
)
return response
else:
response = jsonify("No Permission")
return response, 401
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.