Pylint报告文件存在循环导入,但该文件并未导入任何内容。

4
所以,Pylint1.4.3)报告了循环导入,但这并没有太多意义。 首先,报告的文件没有导入语句。
其次,没有文件导入参考文件。一个__init__.py文件从development_config(问题文件)加载配置值,但没有文件导入该文件。
那么为什么Pylint会给我这个警告?

Pylint警告

************* Module heart_beat.development_config
R:  1, 0: Cyclic import (heart_beat -> heart_beat.views -> heart_beat.models) (cyclic-import)
R:  1, 0: Cyclic import (heart_beat -> heart_beat.views) (cyclic-import)

development_config

""" -------------------------- DATA BASE CONFINGURATION --------------------"""
SQLALCHEMY_DATABASE_URI = 'sqlite:////tmp/test.db'
SQLALCHEMY_ECHO = False

""" -------------------------- Flask Application Config --------------------"""
THREADS_PER_PAGE = 8
VERSION = "0.1"

__init__.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

#from register_assets import register_all

app = Flask(__name__, static_url_path='/static')

# the environment variable LIMBO_SETTINGS is set in runserver, run_unit_tests
# or limbo.wsgi.

def load_configs():
    """Take all configs found in development_config.py."""
    app.config.from_pyfile("development_config.py", silent=False)

load_configs()

# global SQLAlchemy configuration
db = SQLAlchemy(app)

#Create and register all static asset bundles.
#register_all(app)

#NOTE: DON'T LISTEN TO YOUR IDE! heart_beat.views is used and required.
import heart_beat.views  # views contains all URL routes, Importing sets routes.
def setup_db():
    """Database creation in a file rather then a statement for easier tests."""
    db.create_all()

def teardown_db():
    """Database deletion in a file rather then a statement for easier tests."""
    db.drop_all()

setup_db()

views.py

from flask import request

from . import app
from . import db
from . import models
from . import exceptions as ex

models.py

import datetime

from . import exceptions
from . import db
from . import app

1
我不确定为什么它特别调用了development_config,但是你确实有循环导入的问题(app(__init__.py)导入views,views导入app)。通常在Flask中,我们会使用蓝图将视图定义在单独的文件中。这个大型的Flask项目组织得非常好,值得一看:https://github.com/masom/bluemonk - engineerC
1个回答

14

我认为目前这是pylint中的一个bug。需要跨多个模块进行分析的事情(例如循环导入和重复代码检测)被作为重构放入最后解析的模块文件中。对我而言,这最终变成了一个空的__init__.py文件,其中包含这两个问题。

这两个重构消息都包含实际出现问题的模块名称:

  • 对于循环导入,有问题的模块列在括号中
  • 对于重复代码,有问题的模块在以下行中以==开头列出

这些组合不仅限于模块的打印输出,还会影响汇总报告% errors / warnings by module,解析最后一个文件会从中得到重构次数的统计信息,而它实际上涉及的模块不会从中获得任何重构次数的统计信息。


4
有没有什么方法可以禁用那些误报,而不完全禁用“cyclic-import”和“duplicate-code”? - adamyi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接