有没有办法在VS代码中移除Python中未使用的导入?

xfyts7mz  于 2023-02-18  发布在  Python
关注(0)|答案(9)|浏览(300)

我真的很想知道是否有一些扩展在Visual Studio代码或其他手段,可以帮助识别和删除任何未使用的导入。
我有很多这样的导入文件,已经接近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
ktca8awb

ktca8awb1#

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

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

这应该会自动删除未使用的python导入。
更多建议:How can I check for unused import in many Python files?

ix0qys7i

ix0qys7i2#

有趣的是,公认的答案并没有解决这个问题--如何删除未使用的导入。
Pylint并不修改代码,它只做去屑。
诚然,我还没有为python找到一个很好的解决方案,但以下是我所看到的:

1.

this answer中所述,VSCode有一个基本的内置选项来自动组织导入,但对我来说效果不是很好-您的里程可能会有所不同:
选项+Shift + O(适用于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插件的问题。可能很快就会修复。

nafvub8i

nafvub8i3#

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

该怎么做:

1.安装autoflake python package,例如通过pip install autoflake(这将由扩展使用)。
1.通过vscode中的扩展选项卡安装autoflake vscode extension
1.(* 可选 *:保存时运行autoflake)安装Save and Run Ext vscode扩展并将这些设置添加到settings.json

{
    "saveAndRunExt": {
        "commands": [
            {
                "match": ".*\\.py",
                "isShellCommand": false,
                "cmd": "autoflake.removeUnused"
            },
        ]
    },
}
bhmjp9jg

bhmjp9jg4#

您可以自己创建这样的VSCode Task

1.安装自动薄片

pip install autoflake

2.创建Vscode任务

  • 创建". vscode/任务. json"。
  • 添加以下设置。

选项1.不使用activate

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "autoflake.removeUnusedImports",
            "command": "${command:python.interpreterPath}",
            // in Git Bash, "'${command:python.interpreterPath}'",
            "args": [
                "-m"
                "autoflake",
                "--in-place",
                "--remove-all-unused-imports",
                "${file}", 
                // in Git Bash, "'${file}'",
                // to run on all files in the working directory, replace "${file}", with "--recursive", "."
            ],
            "presentation": {
                "echo": true,
                "reveal": "silent",
                "focus": false,
                "panel": "dedicated",
                "showReuseMessage": false,
                "clear": false,
                "close": true
            },
            "problemMatcher": []
        },
    ]
}

选项2.使用activate

上述方法(将autoflake作为模块运行)至少可以在Windows上运行(在PowerShell和命令提示符、Git Bash下运行),也可以在其他操作系统或环境下运行(我不知道,因为我没有,请编辑)。

PowerShell
"command": "${command:python.interpreterPath}\\..\\activate.ps1\r\n",
"args": [
    "autoflake",
    "--in-place",
    "--remove-all-unused-imports",
    "${file}", 
],
命令提示符
"command": "${command:python.interpreterPath}\\..\\activate &&",
"args": [
    "autoflake",
    "--in-place",
    "--remove-all-unused-imports",
    "${file}", 
],
巴什

在Bash中,文件路径似乎必须用引号括起来。

"command": "source",
"args": [
    "\"${command:python.interpreterPath}\\..\\activate\"\r\n"
    "autoflake",
    "--in-place",
    "--remove-all-unused-imports",
    "\"${file}\"", 
],

3.将任务添加到键盘快捷键(可选)

  • 按CtrlShiftP键并选择Preferences: Open Keyboard Shortcuts (JSON)
  • 添加以下设置。
[
    {
        "key": "Shift+Alt+P",//Set this value to any you like.
        "command": "workbench.action.tasks.runTask",
        "args": "autoflake.removeUnusedImports",
    }
]

这样,按下快捷键将自动删除未使用的导入。
不幸的是,由于某种原因,vscode-autoflake在我的环境中不起作用。

rsaldnfx

rsaldnfx5#

我建议添加pycln作为预提交钩子,它是为这个任务设计的!
(It仅适用于Python 3.6+)。
文件:https://hadialqattan.github.io/pycln
回购:https://github.com/hadialqattan/pycln
PyPI:https://pypi.org/project/pycln/

bogh5gae

bogh5gae6#

目前还没有明确的方法在VSCode上执行此操作,但您可以轻松地使用**pycln**来执行此操作,只需执行以下操作:

pip3 install pycln
pycln path_of_your_file.py -a

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

piztneat

piztneat7#

现在pylance扩展的新版本中就有了这个功能(我想大多数在VS代码中使用python的人都会有)。
需要注意的是,带有ctrl + alt/option + o键绑定的optimizeImports只对未使用的导入进行排序,而不会删除未使用的导入(参见github issue)。
我有自动保存功能,所以我更喜欢键盘快捷键。如果你有pylance扩展,你可以在keybindings.json中添加以下代码

{
        "key": "shift+alt+r",
        "command": "editor.action.codeAction",
        "args": {
            "kind": "source.unusedImports",
        }
    }

你可以改变键绑定为任何你想要的,但基本上当你按下键绑定(即shift + option/alt + r),它应该删除所有未使用的导入。
我相信如果你想自动保存为上述你可以添加以下到您的settings.json:

"[python]": {
        "editor.codeActionsOnSave": {
          "source.organizeImports": true,
          "source.unusedImports": true
        }
    }
owfi6suc

owfi6suc8#

使用这个最近创建的VSCode扩展,autoflake可以通过单击Explorer(在VSCode中)选项卡的上下文菜单或从命令面板调用命令来自动运行,以删除未使用的导入。
https://marketplace.visualstudio.com/items?itemName=mikoz.autoflake-extension
(As我之前的答案不知怎么被版主删除了,我现在发布一个新的,哈哈。)

qlvxas9a

qlvxas9a9#

我知道这充其量只是一种变通办法,但如果您想要这个功能,Pycharm和IntelliJ可以使用优化导入热键(MacOS上的ctrl + opt + o)自动完成。

相关问题