指定 --django-settings-module 标志时 pylint (pylint_django) 不起作用

2024-01-10

我正在使用最新版本pylint_django前几天发布:

Package                       Version
----------------------------- ----------
pylint                        2.7.4
pylint-django                 2.4.3
pylint-plugin-utils           0.6

当我启用时pylint在 VSC 中pylint_diango扩展我收到此错误

Django was not configured. For more information runpylint --load-plugins=pylint_django --help-msg=django-not-configured

我跟着这些说明 https://stackoverflow.com/questions/65761250/pylint-django-raising-error-about-django-not-being-configured-when-thats-not-th解决这个问题并将以下几行添加到我的settings.json:

{
  ...
  "python.linting.pylintArgs": [
    "--load-plugins=pylint_django"
    "--django-settings-module=wapp.settings"
  ]
}

然而指定后--django-settings-module=wapp.settings标志 pylint 停止工作。我的 Django 项目结构(在 VSC 中打开的根目录)如下所示:

.
├── ...
├── manage.py
├── media
│   └── profile_pictures
├── requirements.txt
├── ...
├── venv
└── wapp
    ├── asgi.py
    ├── __init__.py
    ├── __pycache__
    ├── secrets.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

我也尝试过指定DJANGO_SETTINGS_MODULE环境变量,但似乎没有效果。我还尝试直接从命令行运行 pylint 以查看标志是否正常工作。当我跑步时pylint path/to/some/python_file.pylinter 产生了正确的输出,但是当我尝试时pylint --load-plugins=pylint_django path/to/some/python_file.py我收到一个错误ModuleNotFoundError: No module named 'wapp'.

有人偶然发现类似的问题吗?


经过几个小时尝试了多种可能性,这就是我如何让这件事发挥作用

我的文件夹结构

.
├── backend
│   ├── backend <- the main app
│   │   └── settings.py
│   ├── __init__.py
│   ├── manage.py
│   ├── app_1
│   ├── app_2
│   ├── app_3
│   └── app_4
├── database
│   └── data-base-stuff
├── frontend
│   └── front-end-stuff
└── README.md

vscode/settings.json

{   
    
    "python.linting.enabled": true,
    "python.linting.pylintEnabled": true,
    "python.linting.pylintPath": "${workspaceFolder}/backend/.venv/bin/pylint",
    "python.linting.pylintArgs": [
        "--init-hook", "import os, sys; os.environ['DJANGO_SETTINGS_MODULE'] = 'backend.backend.settings'; sys.path.append('${workspaceFolder}/backend')",        
        "--load-plugins", "pylint_django",
    ],
    "python.linting.cwd": "${workspaceFolder}/backend/",
}

由于某种原因,既不使用"--django-settings-module=backend.settings" nor "--django-settings-module=backend.backend.settings"作品。如果我运行 VSCode 在我的终端上运行的命令,他们会给我这个错误

Traceback (most recent call last):
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/pylint_django/checkers/foreign_key_strings.py", line 92, in open
    django.setup()
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/django/conf/__init__.py", line 102, in __getattr__
    self._setup(name)
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/django/conf/__init__.py", line 82, in _setup
    raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: Requested setting LOGGING_CONFIG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/pylint_django/checkers/foreign_key_strings.py", line 120, in open
    settings.configure(Settings(self.config.django_settings_module))
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/django/conf/__init__.py", line 217, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/local/python/3.10.12/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'backend.settings'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/workspaces/checkout/backend/.venv/bin/pylint", line 8, in <module>
    sys.exit(run_pylint())
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/pylint/__init__.py", line 36, in run_pylint
    PylintRun(argv or sys.argv[1:])
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/pylint/lint/run.py", line 215, in __init__
    linter.check(args)
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/pylint/lint/pylinter.py", line 713, in check
    with self._astroid_module_checker() as check_astroid_module:
  File "/usr/local/python/3.10.12/lib/python3.10/contextlib.py", line 135, in __enter__
    return next(self.gen)
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/pylint/lint/pylinter.py", line 1015, in _astroid_module_checker
    checker.open()
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/pylint_django/checkers/foreign_key_strings.py", line 125, in open
    self.add_message(
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/pylint/checkers/base_checker.py", line 164, in add_message
    self.linter.add_message(
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/pylint/lint/pylinter.py", line 1341, in add_message
    self._add_one_message(
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/pylint/lint/pylinter.py", line 1274, in _add_one_message
    self.stats.increase_single_module_message_count(
  File "/workspaces/checkout/backend/.venv/lib/python3.10/site-packages/pylint/utils/linterstats.py", line 315, in increase_single_module_message_count
    self.by_module[modname][type_name] += increase
KeyError: 'Command line or configuration file'

阅读文档 https://github.com/pylint-dev/pylint-django#usage我发现配置 django 的另一种方式是通过DJANGO_SETTINGS_MODULE环境变量。所以我尝试了这种方法并且有效

DJANGO_SETTINGS_MODULE=backend.backend.settings pylint --init-hook "import sys; sys.path.append('./backend')" --load-plugins pylint_django ./backend/payments/models.py

并设置 pylintawaysDJANGO_SETTINGS_MODULEenv,我添加了--init-hook arg

--init-hook "import os, sys; os.environ['DJANGO_SETTINGS_MODULE'] = 'backend.backend.settings'; sys.path.append('${workspaceFolder}/backend')"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

指定 --django-settings-module 标志时 pylint (pylint_django) 不起作用 的相关文章

  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 基于摩纳哥编辑器的命名空间自动完成

    我知道摩纳哥编辑器可以根据您的自定义规则自动完成提示 但我不知道如何自动完成基于名称空间 像这样 我还在自定义完成项提供程序内部实现了别名智能感知支持 目标是在 标签 上显示自定义建议 const completionItemsProvid
  • django.db.utils.ProgrammingError:关系“django_content_type”不存在

    我有一个项目 我在我的电脑上慢慢建立起来 并且运行良好 我只是想将它放到服务器上 但收到此错误 django db utils ProgrammingError 关系 django content type 确实 不存在 我无法解决这个问题
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Django admin - 更改权限列表

    是否可以更改用户编辑页面中的权限列表 我不想显示所有权限 例如管理日志条目或身份验证组等 如何修改主查询集以排除其中的某些查询集 我的想法来自这个话题 https groups google com forum topic django u
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐