11 个版本
0.2.3 | 2024年3月6日 |
---|---|
0.2.2 | 2024年1月21日 |
0.1.6 | 2024年1月18日 |
0.1.3 | 2023年8月8日 |
#389 在 命令行工具
419 每月下载量
31KB
535 行
🪚
poetry-udeps
poetry-udeps
受 cargo-udeps
的启发,是一个用于在基于 Poetry 的 Python 项目中查找未使用依赖项的工具。也就是说,在 pyproject.toml
中查找未使用依赖项。
Python 依赖项并不总是与其包名一一对应。因此,您可能会看到一些假阳性。希望这个工具生成的假阳性列表足够小,以至于它可以发挥作用,并且易于手动审计。
可以将额外的名称映射添加到 src/name_map.rs
中以提高准确性。
内容
安装
此工具假设您在具有 poetry
的位置运行它,该位置在您的 $PATH
上。
来自 crates.io
cargo install poetry-udeps --locked
使用方法
这应该在您的 Poetry 项目根目录中运行。
Find unused dependencies in pyproject.toml
Usage: poetry-udeps [OPTIONS]
Options:
-v, --verbose... More output per occurrence
-q, --quiet... Less output per occurrence
-e, --virtualenv Whether to look for dependency usage in the poetry
virtualenv
-d, --dev Whether to look for unused dependencies from
dev-dependencies
-h, --help Print help (see more with '--help')
-V, --version Print version
它是如何工作的?
这是一个非常简单的解析方法。也就是说,poetry-udeps
不解释任何 Python,我们只是逐字搜索项目中的所有文件以查找与包名(或由嵌入式名称映射定义的别名)匹配的导入语句。这意味着它非常快!但是,这也意味着它无法检测到一些假阳性。例如,sqlalchemy 的异步会话可能依赖于 asyncpg
,即使您的项目立即不导入它。为了帮助解决(某种程度上)这个问题,您可以使用选项(--virtualenv
)来包括搜索您 poetry 环境中的所有 Python 文件。
相关工具
- deptry(Python):在 Python 项目中查找未使用、缺失和传递依赖项。
- pip-extra-reqs(Python):查找应包含在项目要求中的包。
- fawltydeps(Python):Python 依赖项检查器。
- py-unused-deps (python): 在您的Python包中查找未使用的依赖项。
基准测试
poetry-udeps
仅检查未使用的依赖项。以下,我们在AMD Ryzen 7 3700X和16 GB RAM的台式机上对此单个功能进行了基准测试。目标仓库是一个包含约10万行Python代码的私有仓库。
❯ tokei -C -t Python
===============================================================================
Language Files Lines Code Comments Blanks
===============================================================================
Python 699 118239 100522 5464 12253
===============================================================================
Total 699 118239 100522 5464 12253
===============================================================================
结果
poetry-udeps
❯ hyperfine --warmup 2 'poetry-udeps'
Benchmark 1: poetry-udeps
Time (mean ± σ): 116.2 ms ± 2.9 ms [User: 217.9 ms, System: 12.9 ms]
Range (min … max): 111.6 ms … 123.5 ms 26 runs
deptry
对于 deptry
,只考虑了 DEP002
(未使用的依赖项)。
❯ hyperfine --warmup 2 -i 'deptry -i DEP001,DEP003,DEP004 .'
Benchmark 1: deptry -i DEP001,DEP003,DEP004 .
Time (mean ± σ): 1.065 s ± 0.020 s [User: 1.038 s, System: 0.026 s]
Range (min … max): 1.043 s … 1.116 s 10 runs
pip-extra-reqs
pip-extra-reqs
无法在此项目上运行。
❯ pip-extra-reqs .
Traceback (most recent call last):
File "/home/benchmark/.venv/bin/pip-extra-reqs", line 8, in <module>
sys.exit(main())
File "/home/benchmark/.venv/lib/python3.10/site-packages/pip_check_reqs/find_extra_reqs.py", line 211, in main
extras = find_extra_reqs(
File "/home/benchmark/.venv/lib/python3.10/site-packages/pip_check_reqs/find_extra_reqs.py", line 35, in find_extra_reqs
used_modules = common.find_imported_modules(
File "/home/benchmark/.venv/lib/python3.10/site-packages/pip_check_reqs/common.py", line 153, in find_imported_modules
vis.visit(ast.parse(content, str(filename)))
File "/home/lukehsiao/.pyenv/versions/3.10.5/lib/python3.10/ast.py", line 50, in parse
return compile(source, filename, mode, flags,
File "/home/benchmark/.venv/lib/python3.10/site-packages/uuid.py", line 138
if not 0 <= time_low < 1<<32L:
^
SyntaxError: invalid decimal literal
fawltydeps
❯ hyperfine --warmup 2 -i 'fawltydeps --check-unused --deps pyproject.toml'
Benchmark 1: fawltydeps --check-unused --deps pyproject.toml
Time (mean ± σ): 3.824 s ± 0.043 s [User: 3.628 s, System: 0.196 s]
Range (min … max): 3.793 s … 3.916 s 10 runs
py-unused-deps
我无法在此项目上成功运行 py-unused-deps
。
成就墙
这是一个使用 poetry-udeps
找到未使用依赖项的案例列表。欢迎您扩展它
- 待办事项
许可
此工具在蓝橡树许可协议下分发。任何贡献都根据相同的许可证许可,并通过 开发者证书起源 予以承认。
有关详细信息,请参阅 LICENSE。
依赖关系
~11–24MB
~295K SLoC