删除未使用的导入和未使用的变量
项目描述
autoflake
简介
autoflake 从Python代码中删除未使用的导入和未使用的变量。它使用 pyflakes 来执行此操作。
默认情况下,autoflake仅删除标准库模块的未使用导入。(其他模块可能存在副作用,使其自动删除不安全。)默认情况下禁用删除未使用变量的功能。
autoflake还默认删除无用的 pass
语句。
示例
在下面的示例上运行autoflake
$ autoflake --in-place --remove-unused-variables example.py
import math
import re
import os
import random
import multiprocessing
import grp, pwd, platform
import subprocess, sys
def foo():
from abc import ABCMeta, WeakSet
try:
import multiprocessing
print(multiprocessing.cpu_count())
except ImportError as exception:
print(sys.version)
return math.pi
结果为
import math
import sys
def foo():
try:
import multiprocessing
print(multiprocessing.cpu_count())
except ImportError:
print(sys.version)
return math.pi
安装
$ pip install --upgrade autoflake
高级用法
要允许autoflake删除额外的未使用导入(除标准库之外的),请使用 --imports
选项。它接受一个以逗号分隔的名称列表
$ autoflake --imports=django,requests,urllib3 <filename>
要删除所有未使用的导入(无论是来自标准库的还是其他),请使用 --remove-all-unused-imports
选项。
要删除未使用的变量,请使用 --remove-unused-variables
选项。
以下是所有选项的完整列表
usage: autoflake [-h] [-c | -cd] [-r] [-j n] [--exclude globs] [--imports IMPORTS] [--expand-star-imports] [--remove-all-unused-imports] [--ignore-init-module-imports] [--remove-duplicate-keys] [--remove-unused-variables]
[--remove-rhs-for-unused-variables] [--ignore-pass-statements] [--ignore-pass-after-docstring] [--version] [--quiet] [-v] [--stdin-display-name STDIN_DISPLAY_NAME] [--config CONFIG_FILE] [-i | -s]
files [files ...]
Removes unused imports and unused variables as reported by pyflakes.
positional arguments:
files files to format
options:
-h, --help show this help message and exit
-c, --check return error code if changes are needed
-cd, --check-diff return error code if changes are needed, also display file diffs
-r, --recursive drill down directories recursively
-j n, --jobs n number of parallel jobs; match CPU count if value is 0 (default: 0)
--exclude globs exclude file/directory names that match these comma-separated globs
--imports IMPORTS by default, only unused standard library imports are removed; specify a comma-separated list of additional modules/packages
--expand-star-imports
expand wildcard star imports with undefined names; this only triggers if there is only one star import in the file; this is skipped if there are any uses of `__all__` or `del` in the file
--remove-all-unused-imports
remove all unused imports (not just those from the standard library)
--ignore-init-module-imports
exclude __init__.py when removing unused imports
--remove-duplicate-keys
remove all duplicate keys in objects
--remove-unused-variables
remove unused variables
--remove-rhs-for-unused-variables
remove RHS of statements when removing unused variables (unsafe)
--ignore-pass-statements
ignore all pass statements
--ignore-pass-after-docstring
ignore pass statements after a newline ending on '"""'
--version show program's version number and exit
--quiet Suppress output if there are no issues
-v, --verbose print more verbose logs (you can repeat `-v` to make it more verbose)
--stdin-display-name STDIN_DISPLAY_NAME
the name used when processing input from stdin
--config CONFIG_FILE Explicitly set the config file instead of auto determining based on file location
-i, --in-place make changes to files instead of printing diffs
-s, --stdout print changed text to stdout. defaults to true when formatting stdin, or to false otherwise
要忽略文件,您也可以在文件顶部添加注释
# autoflake: skip_file
import os
配置
使用 pyproject.toml
文件配置默认参数
[tool.autoflake]
check = true
imports = ["django", "requests", "urllib3"]
或 setup.cfg
文件
[autoflake]
check=true
imports=django,requests,urllib3
配置参数的名称与标志匹配(例如,使用参数 expand-star-imports
对应于标志 --expand-star-imports
)。
测试
要运行单元测试:
$ ./test_autoflake.py
还有一个模糊测试,它会针对任何给定Python文件的集合运行。它通过在文件前后运行pyflakes来测试autoflake的效果,并检查pyflakes的结果是否变差。如果pyflakes的结果变得更差,则测试失败。(这是在内存中进行的。实际文件保持不变。):
$ ./test_fuzz.py --verbose
排除特定行
可能存在一些导入是为了它们的副作用,即使您没有直接在该文件中使用它们。
这在基于Flask的应用程序中很常见。例如,导入Python模块(文件),这些模块导入了主 app
,以便它们包含在路由中。
例如
from .endpoints import role, token, user, utils
由于这些导入没有直接使用,如果您使用 --remove-all-unused-imports
选项,它们将被删除。
要防止这种情况发生,而不必排除整个文件,您可以在行的末尾添加一个 # noqa
注释,如下所示
from .endpoints import role, token, user, utils # noqa
该行将指示 autoflake
保持该特定行不变。
使用 pre-commit 钩子
将以下内容添加到您的 .pre-commit-config.yaml
- repo: https://github.com/PyCQA/autoflake
rev: v2.3.1
hooks:
- id: autoflake
在自定义参数时,请确保在参数列表中包含 --in-place
- repo: https://github.com/PyCQA/autoflake
rev: v2.2.1
hooks:
- id: autoflake
args: [--remove-all-unused-imports, --in-place]
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发版
autoflake-2.3.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c98b75dc5b0a86459c4f01a1d32ac7eb4338ec4317a4469515ff1e687ecd909e |
|
MD5 | ed3551eefbbb8608d1b323f8ac368509 |
|
BLAKE2b-256 | 2acb486f912d6171bc5748c311a2984a301f4e2d054833a1da78485866c71522 |
autoflake-2.3.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3ae7495db9084b7b32818b4140e6dc4fc280b712fb414f5b8fe57b0a8e85a840 |
|
MD5 | 4a83eec4bd4d1b158661a5406766dbf6 |
|
BLAKE2b-256 | a2ee3fd29bf416eb4f1c5579cf12bf393ae954099258abd7bde03c4f9716ef6b |