【问题标题】:Pylint reporting Cyclic Import on file without importsPylint 在没有导入的情况下报告循环导入
【发布时间】:2015-06-05 00:23:39
【问题描述】:

所以Pylint (1.4.3) 正在报告循环导入,这没有多大意义。 首先,report 文件没有 import 语句。

第二个没有文件导入参考文件。 __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

【问题讨论】:

  • 我不确定它为什么专门调用 development_config,但你确实有循环导入(应用程序(__init__.py)导入视图,视图导入应用程序)。通常在烧瓶中,人们会使用蓝图在单独的文件中定义视图。这个大型烧瓶项目组织得很好,值得一看:github.com/masom/bluemonk

标签: python python-3.x flask pylint


【解决方案1】:

我相信这是目前 pylint 中的一个错误。需要对多个模块进行分析的事情(例如cyclic-importduplicate-code 检测)作为重构被扔到最后解析的模块文件中。对我来说,这最终成为一个空的 __init__.py 文件,其中包含这两个文件。

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

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

这些分组不仅限于模块的打印输出,它还会影响摘要报告% errors / warnings by module,其中最终解析的文件获取重构的计数,并且它实际关注的模块都没有得到任何计数来自他们。

【讨论】:

  • 是否可以在不完全禁用cyclic-importduplicate-code 的情况下禁用这些误报?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 2019-02-16
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多