【问题标题】:Is there a way to remove unused imports for Python in VS Code?有没有办法在 VS Code 中删除未使用的 Python 导入?
【发布时间】:2019-04-20 11:38:16
【问题描述】:

我真的很想知道 Visual Studio Code 中是否有一些扩展或其他方式可以帮助识别和删除任何未使用的导入。

我有大量这样的导入,并且接近 40 行。我知道其中一些没有使用,问题是安全地移除它们。

from django.core.mail import EmailMultiAlternatives, send_mail
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from rest_framework import routers, serializers, viewsets, status
from rest_framework.views import APIView
from rest_framework.response import Response
from django.contrib.auth.models import User

【问题讨论】:

  • 为 pylint 启用未使用的导入
  • @HSK 详细说明如何在 vs 代码中为 pylint 启用未使用导入

标签: python visual-studio-code


【解决方案1】:

转到用户设置 json 文件并添加以下内容:

"python.linting.pylintEnabled": true,
"python.linting.pylintArgs": [
    "--enable=W0614"
]

这应该会自动删除未使用的 python 导入。

更多建议在这里: How can I check for unused import in many Python files?

【讨论】:

  • 您可以尝试改用--enable= W0611。有关选项列表,您可以参考:docs.pylint.org/en/1.6.0/features.html
  • 如果您想知道用户设置在哪里,您可以按CMD/CTRL + SHIFT + P,然后输入“settings.json”来调出它。
  • 它会自动删除代码吗?但这对我不起作用。
  • Pylint 不会编辑您的代码。此命令将仅突出显示您未使用的导入。 (对我来说,它并没有突出个别的,只是行开头,这不太理想)
  • @Dave:对我来说是一样的。像 django.utils import timezone 这样的导入没有标记,只有像 import datetime 这样的导入。有没有办法解决这个问题?
【解决方案2】:

有趣的是,接受的答案并没有解决问题 - 如何删除未使用的导入。

Pylint 不会修改代码,它会进行 linting。

诚然 i 仍然没有为 python 找到一个很好的解决方案,但这是我所看到的:

1.

正如this answer 中所述,VSCode 有一个基本的内置选项来自动组织导入,但对我来说效果不佳 - 你的情况可能会有所不同:

选项 + Shift + O for Mac

Alt + Shift + O

如果这对你有用,你也可以在 VSCodes 设置中保存时使用:

"editor.codeActionsOnSave": {
  "source.organizeImports": true
}

2.

一个名为autoflake 的模块可以做到这一点,例如:

autoflake --in-place --remove-unused-variables example.py

但是,里程可能会有所不同..

注意

我看到issue logged in the vscode github 指出“快速修复”功能已损坏,vscode 团队表示这是 vscode python 插件的问题..可能很快会修复..?

【讨论】:

    【解决方案3】:

    我建议添加pycln 作为预提交钩子,它专门用于此任务!

    (仅适用于 Python 3.6+)。

    文档:https://hadialqattan.github.io/pycln

    回购:https://github.com/hadialqattan/pycln

    PyPI:https://pypi.org/project/pycln/

    【讨论】:

      【解决方案4】:

      目前在 VSCode 上没有明确的方法可以做到这一点,但您可以轻松地使用 pycln 来做到这一点,只需这样做:

      pip3 install pycln
      pycln path_of_your_file.py -a
      

      然后所有未使用的导入将被删除!

      【讨论】:

        【解决方案5】:

        autoflake vscode extension 删除未使用的导入(而不是仅仅突出显示它们或对它们进行排序)。

        做什么:

        1. 安装autoflake python package 例如通过pip install autoflake(这将被扩展使用)。
        2. 通过 vscode 中的扩展选项卡安装autoflake vscode extension
        3. 可选:保存时运行 autoflake)安装Save and Run Ext vscode 扩展并将这些设置添加到settings.json
        {
            "saveAndRunExt": {
                "commands": [
                    {
                        "match": ".*\\.py",
                        "isShellCommand": false,
                        "cmd": "autoflake.removeUnused"
                    },
                ]
            },
        }
        

        【讨论】:

        • 感谢您向我展示“保存并运行”。但是一旦你从 PyPI 安装,你就不需要 VSCode 扩展了。您可以输入"cmd": "autoflake -i --remove-all-unused-imports --remove-unused-variables ${file}"(或您想要的任何选项)。请注意 inline # noqa 排除特定导入自动删除的能力。
        • @NathanielJones 谢谢;好点!一件好事是直接使用 autoflake 为使用包提供了额外的灵活性。对于那些对使用该方法感兴趣的人,请注意,它需要 (1) 将设置的名称更改为 "saveAndRun" (vs "saveAndRunExt"),(2) 删除 "isShellCommand" 选项,以及 (3) 使用 "cmd"调用 autoflake。但是,到目前为止,我实际上更喜欢 autoflake 扩展名,因为它不会用命令污染我的终端和终端历史记录(当我按照建议使用 "saveAndRun" 时,这些命令是在我的活动终端中运行的)。
        • 没有终端杂乱听起来不错。但是你从哪里得到"saveAndRunExt"?在您分享答案的链接中,该示例仅显示"saveAndRun"。当我添加“Ext”时,我的 VSCode 会显示“未知配置设置”。
        • @NathanielJones 很棒的收获!我实际上安装了两个单独的扩展(Ext 版本是我最初拥有的一个分支,我有一个链接)。我现在已经修复了使用我实际使用的扩展名的答案,该扩展名现在与设置 sn-p 一致。再次感谢! (如果它不像宣传的那样工作,请再次询问:)
        【解决方案6】:

        我承认这充其量是一种解决方法,但如果您想要此功能,Pycharm 和 IntelliJ 会使用优化导入热键 (ctrl + opt + o 在 MacOS 上)。

        【讨论】:

          猜你喜欢
          • 2019-05-09
          • 2022-11-28
          • 2018-03-30
          • 2020-11-16
          • 1970-01-01
          • 2022-09-29
          • 1970-01-01
          • 2018-03-25
          • 1970-01-01
          相关资源
          最近更新 更多