pysentry-rs 0.3.3__tar.gz → 0.3.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pysentry-rs might be problematic. Click here for more details.
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/.pre-commit-hooks.yaml +2 -2
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/Cargo.lock +71 -20
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/Cargo.toml +4 -4
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/PKG-INFO +47 -5
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/README.md +46 -4
- pysentry_rs-0.3.5/benchmarks/results/0.3.3.md +141 -0
- pysentry_rs-0.3.5/benchmarks/results/0.3.4.md +141 -0
- pysentry_rs-0.3.5/benchmarks/results/latest.md +141 -0
- pysentry_rs-0.3.5/benchmarks/test_data/uv.lock +2972 -0
- pysentry_rs-0.3.5/fixtures/pipfile-tests/Pipfile +27 -0
- pysentry_rs-0.3.5/fixtures/pipfile-tests/Pipfile.lock +259 -0
- pysentry_rs-0.3.5/fixtures/pipfile-vulnerable-tests/Pipfile +20 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/cache/audit.rs +48 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/cache/storage.rs +2 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/cli.rs +87 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/parsers/mod.rs +6 -0
- pysentry_rs-0.3.5/src/parsers/pipfile.rs +596 -0
- pysentry_rs-0.3.5/src/parsers/pipfile_lock.rs +342 -0
- pysentry_rs-0.3.3/benchmarks/results/latest.md +0 -141
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/.github/FUNDING.yml +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/.github/dependabot.yml +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/.github/workflows/benchmark.yml +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/.github/workflows/ci.yml +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/.github/workflows/release.yml +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/.gitignore +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/.pre-commit-config.yaml +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/LICENSE +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/.gitignore +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/.python-version +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/README.md +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/main.py +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/pyproject.toml +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/results/0.2.3.md +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/results/0.3.1.md +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/results/0.3.2.md +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/src/benchmark_runner.py +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/src/performance_monitor.py +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/src/report_generator.py +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/src/tool_wrapper.py +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/test_data/large_requirements.txt +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/test_data/small_requirements.txt +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/benchmarks/uv.lock +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/fixtures/requirements-tests/requirements-dev.txt +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/fixtures/requirements-tests/requirements.txt +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/fixtures/requirements-tests-vulnerable/requirements.txt +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/pyproject.toml +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/python/pysentry/__init__.py +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/cache/mod.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/config.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/dependency/mod.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/dependency/resolvers/mod.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/dependency/resolvers/pip_tools.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/dependency/resolvers/uv.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/dependency/scanner.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/error.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/lib.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/main.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/output/mod.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/output/report.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/output/sarif.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/parsers/lock.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/parsers/poetry_lock.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/parsers/pyproject.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/parsers/requirements.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/providers/mod.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/providers/osv.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/providers/pypa.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/providers/pypi.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/python.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/types.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/vulnerability/database.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/vulnerability/matcher.rs +0 -0
- {pysentry_rs-0.3.3 → pysentry_rs-0.3.5}/src/vulnerability/mod.rs +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
- id: pysentry
|
|
2
2
|
name: pysentry
|
|
3
3
|
description: "Fast security vulnerability scanner for Python dependencies"
|
|
4
|
-
entry: pysentry
|
|
4
|
+
entry: pysentry-rs
|
|
5
5
|
language: python
|
|
6
6
|
always_run: true
|
|
7
7
|
additional_dependencies:
|
|
8
|
-
["pysentry-rs==0.3.
|
|
8
|
+
["pysentry-rs==0.3.4", "uv==0.8.9", "pip-tools==7.5.0"]
|
|
9
9
|
minimum_pre_commit_version: "2.9.2"
|
|
10
10
|
types: [python]
|
|
@@ -108,9 +108,9 @@ dependencies = [
|
|
|
108
108
|
|
|
109
109
|
[[package]]
|
|
110
110
|
name = "async-trait"
|
|
111
|
-
version = "0.1.
|
|
111
|
+
version = "0.1.89"
|
|
112
112
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
113
|
-
checksum = "
|
|
113
|
+
checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
|
|
114
114
|
dependencies = [
|
|
115
115
|
"proc-macro2",
|
|
116
116
|
"quote",
|
|
@@ -253,6 +253,16 @@ version = "1.0.4"
|
|
|
253
253
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
254
254
|
checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
|
|
255
255
|
|
|
256
|
+
[[package]]
|
|
257
|
+
name = "core-foundation"
|
|
258
|
+
version = "0.10.1"
|
|
259
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
260
|
+
checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
|
|
261
|
+
dependencies = [
|
|
262
|
+
"core-foundation-sys",
|
|
263
|
+
"libc",
|
|
264
|
+
]
|
|
265
|
+
|
|
256
266
|
[[package]]
|
|
257
267
|
name = "core-foundation-sys"
|
|
258
268
|
version = "0.8.7"
|
|
@@ -610,11 +620,11 @@ dependencies = [
|
|
|
610
620
|
"hyper",
|
|
611
621
|
"hyper-util",
|
|
612
622
|
"rustls",
|
|
623
|
+
"rustls-native-certs",
|
|
613
624
|
"rustls-pki-types",
|
|
614
625
|
"tokio",
|
|
615
626
|
"tokio-rustls",
|
|
616
627
|
"tower-service",
|
|
617
|
-
"webpki-roots",
|
|
618
628
|
]
|
|
619
629
|
|
|
620
630
|
[[package]]
|
|
@@ -976,6 +986,12 @@ version = "1.70.1"
|
|
|
976
986
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
977
987
|
checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad"
|
|
978
988
|
|
|
989
|
+
[[package]]
|
|
990
|
+
name = "openssl-probe"
|
|
991
|
+
version = "0.1.6"
|
|
992
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
993
|
+
checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
|
|
994
|
+
|
|
979
995
|
[[package]]
|
|
980
996
|
name = "option-ext"
|
|
981
997
|
version = "0.2.0"
|
|
@@ -1121,7 +1137,7 @@ dependencies = [
|
|
|
1121
1137
|
|
|
1122
1138
|
[[package]]
|
|
1123
1139
|
name = "pysentry"
|
|
1124
|
-
version = "0.3.
|
|
1140
|
+
version = "0.3.5"
|
|
1125
1141
|
dependencies = [
|
|
1126
1142
|
"anyhow",
|
|
1127
1143
|
"async-trait",
|
|
@@ -1305,9 +1321,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
|
|
1305
1321
|
|
|
1306
1322
|
[[package]]
|
|
1307
1323
|
name = "reqwest"
|
|
1308
|
-
version = "0.12.
|
|
1324
|
+
version = "0.12.23"
|
|
1309
1325
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1310
|
-
checksum = "
|
|
1326
|
+
checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb"
|
|
1311
1327
|
dependencies = [
|
|
1312
1328
|
"base64",
|
|
1313
1329
|
"bytes",
|
|
@@ -1325,6 +1341,7 @@ dependencies = [
|
|
|
1325
1341
|
"pin-project-lite",
|
|
1326
1342
|
"quinn",
|
|
1327
1343
|
"rustls",
|
|
1344
|
+
"rustls-native-certs",
|
|
1328
1345
|
"rustls-pki-types",
|
|
1329
1346
|
"serde",
|
|
1330
1347
|
"serde_json",
|
|
@@ -1341,7 +1358,6 @@ dependencies = [
|
|
|
1341
1358
|
"wasm-bindgen-futures",
|
|
1342
1359
|
"wasm-streams",
|
|
1343
1360
|
"web-sys",
|
|
1344
|
-
"webpki-roots",
|
|
1345
1361
|
]
|
|
1346
1362
|
|
|
1347
1363
|
[[package]]
|
|
@@ -1397,6 +1413,18 @@ dependencies = [
|
|
|
1397
1413
|
"zeroize",
|
|
1398
1414
|
]
|
|
1399
1415
|
|
|
1416
|
+
[[package]]
|
|
1417
|
+
name = "rustls-native-certs"
|
|
1418
|
+
version = "0.8.1"
|
|
1419
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1420
|
+
checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3"
|
|
1421
|
+
dependencies = [
|
|
1422
|
+
"openssl-probe",
|
|
1423
|
+
"rustls-pki-types",
|
|
1424
|
+
"schannel",
|
|
1425
|
+
"security-framework",
|
|
1426
|
+
]
|
|
1427
|
+
|
|
1400
1428
|
[[package]]
|
|
1401
1429
|
name = "rustls-pki-types"
|
|
1402
1430
|
version = "1.12.0"
|
|
@@ -1430,6 +1458,38 @@ version = "1.0.20"
|
|
|
1430
1458
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1431
1459
|
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
|
|
1432
1460
|
|
|
1461
|
+
[[package]]
|
|
1462
|
+
name = "schannel"
|
|
1463
|
+
version = "0.1.27"
|
|
1464
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1465
|
+
checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
|
|
1466
|
+
dependencies = [
|
|
1467
|
+
"windows-sys 0.59.0",
|
|
1468
|
+
]
|
|
1469
|
+
|
|
1470
|
+
[[package]]
|
|
1471
|
+
name = "security-framework"
|
|
1472
|
+
version = "3.3.0"
|
|
1473
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1474
|
+
checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c"
|
|
1475
|
+
dependencies = [
|
|
1476
|
+
"bitflags",
|
|
1477
|
+
"core-foundation",
|
|
1478
|
+
"core-foundation-sys",
|
|
1479
|
+
"libc",
|
|
1480
|
+
"security-framework-sys",
|
|
1481
|
+
]
|
|
1482
|
+
|
|
1483
|
+
[[package]]
|
|
1484
|
+
name = "security-framework-sys"
|
|
1485
|
+
version = "2.14.0"
|
|
1486
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1487
|
+
checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
|
|
1488
|
+
dependencies = [
|
|
1489
|
+
"core-foundation-sys",
|
|
1490
|
+
"libc",
|
|
1491
|
+
]
|
|
1492
|
+
|
|
1433
1493
|
[[package]]
|
|
1434
1494
|
name = "serde"
|
|
1435
1495
|
version = "1.0.219"
|
|
@@ -1639,18 +1699,18 @@ dependencies = [
|
|
|
1639
1699
|
|
|
1640
1700
|
[[package]]
|
|
1641
1701
|
name = "thiserror"
|
|
1642
|
-
version = "2.0.
|
|
1702
|
+
version = "2.0.15"
|
|
1643
1703
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1644
|
-
checksum = "
|
|
1704
|
+
checksum = "80d76d3f064b981389ecb4b6b7f45a0bf9fdac1d5b9204c7bd6714fecc302850"
|
|
1645
1705
|
dependencies = [
|
|
1646
1706
|
"thiserror-impl",
|
|
1647
1707
|
]
|
|
1648
1708
|
|
|
1649
1709
|
[[package]]
|
|
1650
1710
|
name = "thiserror-impl"
|
|
1651
|
-
version = "2.0.
|
|
1711
|
+
version = "2.0.15"
|
|
1652
1712
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1653
|
-
checksum = "
|
|
1713
|
+
checksum = "44d29feb33e986b6ea906bd9c3559a856983f92371b3eaa5e83782a351623de0"
|
|
1654
1714
|
dependencies = [
|
|
1655
1715
|
"proc-macro2",
|
|
1656
1716
|
"quote",
|
|
@@ -2100,15 +2160,6 @@ dependencies = [
|
|
|
2100
2160
|
"wasm-bindgen",
|
|
2101
2161
|
]
|
|
2102
2162
|
|
|
2103
|
-
[[package]]
|
|
2104
|
-
name = "webpki-roots"
|
|
2105
|
-
version = "1.0.2"
|
|
2106
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2107
|
-
checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2"
|
|
2108
|
-
dependencies = [
|
|
2109
|
-
"rustls-pki-types",
|
|
2110
|
-
]
|
|
2111
|
-
|
|
2112
2163
|
[[package]]
|
|
2113
2164
|
name = "winapi"
|
|
2114
2165
|
version = "0.3.9"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "pysentry"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.5"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
rust-version = "1.79"
|
|
6
6
|
description = "Security vulnerability auditing for Python packages"
|
|
@@ -23,7 +23,7 @@ python = ["pyo3"]
|
|
|
23
23
|
|
|
24
24
|
[dependencies]
|
|
25
25
|
anyhow = "1.0.99"
|
|
26
|
-
async-trait = "0.1.
|
|
26
|
+
async-trait = "0.1.89"
|
|
27
27
|
chrono = { version = "0.4.41", features = ["serde"] }
|
|
28
28
|
clap = { version = "4.5.45", features = ["derive"] }
|
|
29
29
|
dirs = "6.0.0"
|
|
@@ -33,14 +33,14 @@ owo-colors = "4.2.2"
|
|
|
33
33
|
pep440_rs = "0.7.3"
|
|
34
34
|
pyo3 = { version = "0.25.1", features = ["extension-module"], optional = true }
|
|
35
35
|
regex = "1.11.1"
|
|
36
|
-
reqwest = { version = "0.12.
|
|
36
|
+
reqwest = { version = "0.12.23", features = ["json", "stream", "rustls-tls-native-roots"], default-features = false }
|
|
37
37
|
rustc-hash = "2.1.1"
|
|
38
38
|
serde = { version = "1.0.219", features = ["derive"] }
|
|
39
39
|
serde_json = "1.0.142"
|
|
40
40
|
serde_yaml = "0.9.34"
|
|
41
41
|
sha2 = "0.10.9"
|
|
42
42
|
tempfile = "3.20.0"
|
|
43
|
-
thiserror = "2.0.
|
|
43
|
+
thiserror = "2.0.15"
|
|
44
44
|
tokio = { version = "1.47.1", features = ["fs", "io-util", "rt-multi-thread", "macros", "process"] }
|
|
45
45
|
toml = "0.9.5"
|
|
46
46
|
tracing = "0.1.41"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pysentry-rs
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.5
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
@@ -30,15 +30,17 @@ Project-URL: Issues, https://github.com/nyudenkov/pysentry/issues
|
|
|
30
30
|
|
|
31
31
|
[Help to test and improve](https://github.com/nyudenkov/pysentry/issues/12) | [Latest PySentry - pip-audit benchmark](benchmarks/results/latest.md)
|
|
32
32
|
|
|
33
|
+
Please, send feedback to nikita@pysentry.com
|
|
34
|
+
|
|
33
35
|
A fast, reliable security vulnerability scanner for Python projects, written in Rust.
|
|
34
36
|
|
|
35
37
|
## Overview
|
|
36
38
|
|
|
37
|
-
PySentry audits Python projects for known security vulnerabilities by analyzing dependency files (`uv.lock`, `poetry.lock`, `pyproject.toml`, `requirements.txt`) and cross-referencing them against multiple vulnerability databases. It provides comprehensive reporting with support for various output formats and filtering options.
|
|
39
|
+
PySentry audits Python projects for known security vulnerabilities by analyzing dependency files (`uv.lock`, `poetry.lock`, `Pipfile.lock`, `pyproject.toml`, `Pipfile`, `requirements.txt`) and cross-referencing them against multiple vulnerability databases. It provides comprehensive reporting with support for various output formats and filtering options.
|
|
38
40
|
|
|
39
41
|
## Key Features
|
|
40
42
|
|
|
41
|
-
- **Multiple Project Formats**: Supports `uv.lock`, `poetry.lock`, `pyproject.toml`, and `requirements.txt` files
|
|
43
|
+
- **Multiple Project Formats**: Supports `uv.lock`, `poetry.lock`, `Pipfile.lock`, `pyproject.toml`, `Pipfile`, and `requirements.txt` files
|
|
42
44
|
- **External Resolver Integration**: Leverages `uv` and `pip-tools` for accurate requirements.txt constraint solving
|
|
43
45
|
- **Multiple Data Sources**:
|
|
44
46
|
- PyPA Advisory Database (default)
|
|
@@ -191,7 +193,7 @@ uvx pysentry-rs /path/to/python/project
|
|
|
191
193
|
pysentry
|
|
192
194
|
pysentry /path/to/python/project
|
|
193
195
|
|
|
194
|
-
# Automatically detects project type (uv.lock, poetry.lock, pyproject.toml, requirements.txt)
|
|
196
|
+
# Automatically detects project type (uv.lock, poetry.lock, Pipfile.lock, pyproject.toml, Pipfile, requirements.txt)
|
|
195
197
|
pysentry /path/to/project
|
|
196
198
|
|
|
197
199
|
# Force specific resolver
|
|
@@ -494,6 +496,46 @@ Full support for Poetry lock files:
|
|
|
494
496
|
- Handles Poetry's dependency groups and optional dependencies
|
|
495
497
|
- Perfect for Poetry-managed projects with established lock files
|
|
496
498
|
|
|
499
|
+
### Pipfile.lock Files
|
|
500
|
+
|
|
501
|
+
Full support for Pipenv lock files with exact version resolution:
|
|
502
|
+
|
|
503
|
+
- **Exact Version Resolution**: Scans exact dependency versions locked by Pipenv
|
|
504
|
+
- **Lock-File Only Analysis**: Relies purely on the lock file structure, no Pipfile parsing needed
|
|
505
|
+
- **Complete Dependency Tree**: Analyzes all resolved dependencies including transitive ones
|
|
506
|
+
- **Dependency Classification**: Distinguishes between default dependencies and development groups
|
|
507
|
+
|
|
508
|
+
**Key Features:**
|
|
509
|
+
|
|
510
|
+
- No external tools required
|
|
511
|
+
- Fast parsing with exact version information
|
|
512
|
+
- Handles Pipenv's dependency groups (default and develop)
|
|
513
|
+
- Perfect for Pipenv-managed projects with established lock files
|
|
514
|
+
|
|
515
|
+
### Pipfile Files (External Resolution)
|
|
516
|
+
|
|
517
|
+
Support for Pipfile specification files using external dependency resolvers:
|
|
518
|
+
|
|
519
|
+
**Key Features:**
|
|
520
|
+
|
|
521
|
+
- **Dependencies Resolution**: Converts version constraints from Pipfile to exact versions using mature external tools
|
|
522
|
+
- **Multiple Resolver Support**:
|
|
523
|
+
- **uv**: Rust-based resolver, extremely fast and reliable (recommended)
|
|
524
|
+
- **pip-tools**: Python-based resolver using `pip-compile`, widely compatible
|
|
525
|
+
- **Auto-detection**: Automatically detects and uses the best available resolver in your environment
|
|
526
|
+
- **Dependency Groups**: Supports both default packages and dev-packages sections
|
|
527
|
+
- **Complex Constraint Handling**: Supports version ranges, Git dependencies, and environment markers
|
|
528
|
+
|
|
529
|
+
**Resolution Workflow:**
|
|
530
|
+
|
|
531
|
+
1. Detects `Pipfile` in your project (when `Pipfile.lock` is not present)
|
|
532
|
+
2. Auto-detects available resolver (`uv` or `pip-tools`) in current environment
|
|
533
|
+
3. Resolves version constraints to exact dependency versions
|
|
534
|
+
4. Scans resolved dependencies for vulnerabilities
|
|
535
|
+
5. Reports findings with dependency group classification
|
|
536
|
+
|
|
537
|
+
**Note**: When both `Pipfile` and `Pipfile.lock` are present, PySentry prioritizes the lock file for better accuracy. Consider using `pipenv lock` to generate a lock file for the most precise vulnerability scanning.
|
|
538
|
+
|
|
497
539
|
### requirements.txt Files (External Resolution)
|
|
498
540
|
|
|
499
541
|
Advanced support for `requirements.txt` files using external dependency resolvers:
|
|
@@ -732,7 +774,7 @@ pysentry /path/to/python/project
|
|
|
732
774
|
pysentry --requirements requirements-dev.txt --requirements requirements-test.txt
|
|
733
775
|
|
|
734
776
|
# Check if higher-priority files exist (they take precedence)
|
|
735
|
-
ls uv.lock poetry.lock pyproject.toml
|
|
777
|
+
ls uv.lock poetry.lock Pipfile.lock pyproject.toml Pipfile requirements.txt
|
|
736
778
|
```
|
|
737
779
|
|
|
738
780
|
**Performance Issues**
|
|
@@ -4,15 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
[Help to test and improve](https://github.com/nyudenkov/pysentry/issues/12) | [Latest PySentry - pip-audit benchmark](benchmarks/results/latest.md)
|
|
6
6
|
|
|
7
|
+
Please, send feedback to nikita@pysentry.com
|
|
8
|
+
|
|
7
9
|
A fast, reliable security vulnerability scanner for Python projects, written in Rust.
|
|
8
10
|
|
|
9
11
|
## Overview
|
|
10
12
|
|
|
11
|
-
PySentry audits Python projects for known security vulnerabilities by analyzing dependency files (`uv.lock`, `poetry.lock`, `pyproject.toml`, `requirements.txt`) and cross-referencing them against multiple vulnerability databases. It provides comprehensive reporting with support for various output formats and filtering options.
|
|
13
|
+
PySentry audits Python projects for known security vulnerabilities by analyzing dependency files (`uv.lock`, `poetry.lock`, `Pipfile.lock`, `pyproject.toml`, `Pipfile`, `requirements.txt`) and cross-referencing them against multiple vulnerability databases. It provides comprehensive reporting with support for various output formats and filtering options.
|
|
12
14
|
|
|
13
15
|
## Key Features
|
|
14
16
|
|
|
15
|
-
- **Multiple Project Formats**: Supports `uv.lock`, `poetry.lock`, `pyproject.toml`, and `requirements.txt` files
|
|
17
|
+
- **Multiple Project Formats**: Supports `uv.lock`, `poetry.lock`, `Pipfile.lock`, `pyproject.toml`, `Pipfile`, and `requirements.txt` files
|
|
16
18
|
- **External Resolver Integration**: Leverages `uv` and `pip-tools` for accurate requirements.txt constraint solving
|
|
17
19
|
- **Multiple Data Sources**:
|
|
18
20
|
- PyPA Advisory Database (default)
|
|
@@ -165,7 +167,7 @@ uvx pysentry-rs /path/to/python/project
|
|
|
165
167
|
pysentry
|
|
166
168
|
pysentry /path/to/python/project
|
|
167
169
|
|
|
168
|
-
# Automatically detects project type (uv.lock, poetry.lock, pyproject.toml, requirements.txt)
|
|
170
|
+
# Automatically detects project type (uv.lock, poetry.lock, Pipfile.lock, pyproject.toml, Pipfile, requirements.txt)
|
|
169
171
|
pysentry /path/to/project
|
|
170
172
|
|
|
171
173
|
# Force specific resolver
|
|
@@ -468,6 +470,46 @@ Full support for Poetry lock files:
|
|
|
468
470
|
- Handles Poetry's dependency groups and optional dependencies
|
|
469
471
|
- Perfect for Poetry-managed projects with established lock files
|
|
470
472
|
|
|
473
|
+
### Pipfile.lock Files
|
|
474
|
+
|
|
475
|
+
Full support for Pipenv lock files with exact version resolution:
|
|
476
|
+
|
|
477
|
+
- **Exact Version Resolution**: Scans exact dependency versions locked by Pipenv
|
|
478
|
+
- **Lock-File Only Analysis**: Relies purely on the lock file structure, no Pipfile parsing needed
|
|
479
|
+
- **Complete Dependency Tree**: Analyzes all resolved dependencies including transitive ones
|
|
480
|
+
- **Dependency Classification**: Distinguishes between default dependencies and development groups
|
|
481
|
+
|
|
482
|
+
**Key Features:**
|
|
483
|
+
|
|
484
|
+
- No external tools required
|
|
485
|
+
- Fast parsing with exact version information
|
|
486
|
+
- Handles Pipenv's dependency groups (default and develop)
|
|
487
|
+
- Perfect for Pipenv-managed projects with established lock files
|
|
488
|
+
|
|
489
|
+
### Pipfile Files (External Resolution)
|
|
490
|
+
|
|
491
|
+
Support for Pipfile specification files using external dependency resolvers:
|
|
492
|
+
|
|
493
|
+
**Key Features:**
|
|
494
|
+
|
|
495
|
+
- **Dependencies Resolution**: Converts version constraints from Pipfile to exact versions using mature external tools
|
|
496
|
+
- **Multiple Resolver Support**:
|
|
497
|
+
- **uv**: Rust-based resolver, extremely fast and reliable (recommended)
|
|
498
|
+
- **pip-tools**: Python-based resolver using `pip-compile`, widely compatible
|
|
499
|
+
- **Auto-detection**: Automatically detects and uses the best available resolver in your environment
|
|
500
|
+
- **Dependency Groups**: Supports both default packages and dev-packages sections
|
|
501
|
+
- **Complex Constraint Handling**: Supports version ranges, Git dependencies, and environment markers
|
|
502
|
+
|
|
503
|
+
**Resolution Workflow:**
|
|
504
|
+
|
|
505
|
+
1. Detects `Pipfile` in your project (when `Pipfile.lock` is not present)
|
|
506
|
+
2. Auto-detects available resolver (`uv` or `pip-tools`) in current environment
|
|
507
|
+
3. Resolves version constraints to exact dependency versions
|
|
508
|
+
4. Scans resolved dependencies for vulnerabilities
|
|
509
|
+
5. Reports findings with dependency group classification
|
|
510
|
+
|
|
511
|
+
**Note**: When both `Pipfile` and `Pipfile.lock` are present, PySentry prioritizes the lock file for better accuracy. Consider using `pipenv lock` to generate a lock file for the most precise vulnerability scanning.
|
|
512
|
+
|
|
471
513
|
### requirements.txt Files (External Resolution)
|
|
472
514
|
|
|
473
515
|
Advanced support for `requirements.txt` files using external dependency resolvers:
|
|
@@ -706,7 +748,7 @@ pysentry /path/to/python/project
|
|
|
706
748
|
pysentry --requirements requirements-dev.txt --requirements requirements-test.txt
|
|
707
749
|
|
|
708
750
|
# Check if higher-priority files exist (they take precedence)
|
|
709
|
-
ls uv.lock poetry.lock pyproject.toml
|
|
751
|
+
ls uv.lock poetry.lock Pipfile.lock pyproject.toml Pipfile requirements.txt
|
|
710
752
|
```
|
|
711
753
|
|
|
712
754
|
**Performance Issues**
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# PySentry - pip-audit Benchmark Report
|
|
2
|
+
|
|
3
|
+
**Generated:** 2025-08-13 19:15:14
|
|
4
|
+
**Duration:** 2m 31.44s
|
|
5
|
+
**Total Tests:** 20
|
|
6
|
+
|
|
7
|
+
## Executive Summary
|
|
8
|
+
|
|
9
|
+
**Overall Success Rate:** 100.0% (20/20 successful runs)
|
|
10
|
+
|
|
11
|
+
### Small_Requirements Dataset - Cold Cache
|
|
12
|
+
- **Fastest:** pysentry-pypi (0.256s) - 36.61x faster than slowest
|
|
13
|
+
- **Memory Efficient:** pysentry-osv (10.62 MB) - 10.00x less memory than highest
|
|
14
|
+
|
|
15
|
+
### Small_Requirements Dataset - Hot Cache
|
|
16
|
+
- **Fastest:** pysentry-pypi (0.294s) - 26.45x faster than slowest
|
|
17
|
+
- **Memory Efficient:** pysentry-pypi (8.86 MB) - 12.13x less memory than highest
|
|
18
|
+
|
|
19
|
+
### Large_Requirements Dataset - Cold Cache
|
|
20
|
+
- **Fastest:** pysentry-pypi (0.761s) - 50.91x faster than slowest
|
|
21
|
+
- **Memory Efficient:** pysentry-osv (10.78 MB) - 10.57x less memory than highest
|
|
22
|
+
|
|
23
|
+
### Large_Requirements Dataset - Hot Cache
|
|
24
|
+
- **Fastest:** pysentry-pypi (0.693s) - 22.77x faster than slowest
|
|
25
|
+
- **Memory Efficient:** pysentry-pypi (8.71 MB) - 11.50x less memory than highest
|
|
26
|
+
|
|
27
|
+
## Test Environment
|
|
28
|
+
|
|
29
|
+
- **Platform:** Linux-6.11.0-1018-azure-x86_64-with-glibc2.39
|
|
30
|
+
- **Python Version:** 3.11.13
|
|
31
|
+
- **CPU Cores:** 4
|
|
32
|
+
- **Total Memory:** 15.62 GB
|
|
33
|
+
- **Available Memory:** 14.64 GB
|
|
34
|
+
|
|
35
|
+
## Performance Comparison
|
|
36
|
+
|
|
37
|
+
### Small_Requirements Dataset - Cold Cache
|
|
38
|
+
|
|
39
|
+
#### Execution Time Comparison
|
|
40
|
+
|
|
41
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
42
|
+
|---------------------|---------------------|---------------------|
|
|
43
|
+
| 🥇 pysentry-pypi | 0.256s | 1.00x |
|
|
44
|
+
| 🥈 pysentry-osv | 0.959s | 3.74x |
|
|
45
|
+
| pysentry-pypa | 1.096s | 4.28x |
|
|
46
|
+
| pysentry-all-sources | 4.783s | 18.65x |
|
|
47
|
+
| pip-audit-default | 9.387s | 36.61x |
|
|
48
|
+
|
|
49
|
+
#### Memory Usage Comparison
|
|
50
|
+
|
|
51
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
52
|
+
|---------------------|---------------------|---------------------|
|
|
53
|
+
| 🥇 pysentry-osv | 10.62 MB | 1.00x |
|
|
54
|
+
| 🥈 pysentry-pypi | 10.90 MB | 1.03x |
|
|
55
|
+
| pip-audit-default | 45.28 MB | 4.26x |
|
|
56
|
+
| pysentry-pypa | 55.32 MB | 5.21x |
|
|
57
|
+
| pysentry-all-sources | 106.14 MB | 10.00x |
|
|
58
|
+
|
|
59
|
+
### Small_Requirements Dataset - Hot Cache
|
|
60
|
+
|
|
61
|
+
#### Execution Time Comparison
|
|
62
|
+
|
|
63
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
64
|
+
|---------------------|---------------------|---------------------|
|
|
65
|
+
| 🥇 pysentry-pypi | 0.294s | 1.00x |
|
|
66
|
+
| 🥈 pysentry-pypa | 0.854s | 2.90x |
|
|
67
|
+
| pysentry-all-sources | 1.012s | 3.44x |
|
|
68
|
+
| pysentry-osv | 1.217s | 4.13x |
|
|
69
|
+
| pip-audit-default | 7.785s | 26.45x |
|
|
70
|
+
|
|
71
|
+
#### Memory Usage Comparison
|
|
72
|
+
|
|
73
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
74
|
+
|---------------------|---------------------|---------------------|
|
|
75
|
+
| 🥇 pysentry-pypi | 8.86 MB | 1.00x |
|
|
76
|
+
| 🥈 pysentry-osv | 10.52 MB | 1.19x |
|
|
77
|
+
| pip-audit-default | 44.48 MB | 5.02x |
|
|
78
|
+
| pysentry-pypa | 67.44 MB | 7.61x |
|
|
79
|
+
| pysentry-all-sources | 107.53 MB | 12.13x |
|
|
80
|
+
|
|
81
|
+
### Large_Requirements Dataset - Cold Cache
|
|
82
|
+
|
|
83
|
+
#### Execution Time Comparison
|
|
84
|
+
|
|
85
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
86
|
+
|---------------------|---------------------|---------------------|
|
|
87
|
+
| 🥇 pysentry-pypi | 0.761s | 1.00x |
|
|
88
|
+
| 🥈 pysentry-pypa | 1.276s | 1.68x |
|
|
89
|
+
| pysentry-osv | 3.144s | 4.13x |
|
|
90
|
+
| pip-audit-default | 17.817s | 23.41x |
|
|
91
|
+
| pysentry-all-sources | 38.757s | 50.91x |
|
|
92
|
+
|
|
93
|
+
#### Memory Usage Comparison
|
|
94
|
+
|
|
95
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
96
|
+
|---------------------|---------------------|---------------------|
|
|
97
|
+
| 🥇 pysentry-osv | 10.78 MB | 1.00x |
|
|
98
|
+
| 🥈 pysentry-pypi | 12.95 MB | 1.20x |
|
|
99
|
+
| pip-audit-default | 47.48 MB | 4.40x |
|
|
100
|
+
| pysentry-pypa | 62.62 MB | 5.81x |
|
|
101
|
+
| pysentry-all-sources | 113.92 MB | 10.57x |
|
|
102
|
+
|
|
103
|
+
### Large_Requirements Dataset - Hot Cache
|
|
104
|
+
|
|
105
|
+
#### Execution Time Comparison
|
|
106
|
+
|
|
107
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
108
|
+
|---------------------|---------------------|---------------------|
|
|
109
|
+
| 🥇 pysentry-pypi | 0.693s | 1.00x |
|
|
110
|
+
| 🥈 pysentry-pypa | 1.308s | 1.89x |
|
|
111
|
+
| pysentry-all-sources | 3.079s | 4.44x |
|
|
112
|
+
| pysentry-osv | 3.115s | 4.50x |
|
|
113
|
+
| pip-audit-default | 15.778s | 22.77x |
|
|
114
|
+
|
|
115
|
+
#### Memory Usage Comparison
|
|
116
|
+
|
|
117
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
118
|
+
|---------------------|---------------------|---------------------|
|
|
119
|
+
| 🥇 pysentry-pypi | 8.71 MB | 1.00x |
|
|
120
|
+
| 🥈 pysentry-osv | 10.64 MB | 1.22x |
|
|
121
|
+
| pip-audit-default | 46.98 MB | 5.39x |
|
|
122
|
+
| pysentry-pypa | 53.95 MB | 6.19x |
|
|
123
|
+
| pysentry-all-sources | 100.21 MB | 11.50x |
|
|
124
|
+
|
|
125
|
+
## Detailed Analysis
|
|
126
|
+
|
|
127
|
+
### Pysentry Performance
|
|
128
|
+
|
|
129
|
+
- **Execution Time:** Avg: 3.913s, Min: 0.256s, Max: 38.757s
|
|
130
|
+
|
|
131
|
+
- **Memory Usage:** Avg: 46.95 MB, Min: 8.71 MB, Max: 113.92 MB
|
|
132
|
+
|
|
133
|
+
- **Success Rate:** 100.0% (16/16)
|
|
134
|
+
|
|
135
|
+
### Pip-Audit Performance
|
|
136
|
+
|
|
137
|
+
- **Execution Time:** Avg: 12.692s, Min: 7.785s, Max: 17.817s
|
|
138
|
+
|
|
139
|
+
- **Memory Usage:** Avg: 46.05 MB, Min: 44.48 MB, Max: 47.48 MB
|
|
140
|
+
|
|
141
|
+
- **Success Rate:** 100.0% (4/4)
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# PySentry - pip-audit Benchmark Report
|
|
2
|
+
|
|
3
|
+
**Generated:** 2025-08-14 15:42:52
|
|
4
|
+
**Duration:** 1m 55.57s
|
|
5
|
+
**Total Tests:** 20
|
|
6
|
+
|
|
7
|
+
## Executive Summary
|
|
8
|
+
|
|
9
|
+
**Overall Success Rate:** 100.0% (20/20 successful runs)
|
|
10
|
+
|
|
11
|
+
### Small_Requirements Dataset - Cold Cache
|
|
12
|
+
- **Fastest:** pysentry-pypi (0.306s) - 28.70x faster than slowest
|
|
13
|
+
- **Memory Efficient:** pysentry-osv (10.63 MB) - 10.15x less memory than highest
|
|
14
|
+
|
|
15
|
+
### Small_Requirements Dataset - Hot Cache
|
|
16
|
+
- **Fastest:** pysentry-pypi (0.224s) - 36.53x faster than slowest
|
|
17
|
+
- **Memory Efficient:** pysentry-osv (10.78 MB) - 9.89x less memory than highest
|
|
18
|
+
|
|
19
|
+
### Large_Requirements Dataset - Cold Cache
|
|
20
|
+
- **Fastest:** pysentry-pypi (0.996s) - 18.56x faster than slowest
|
|
21
|
+
- **Memory Efficient:** pysentry-osv (10.98 MB) - 9.40x less memory than highest
|
|
22
|
+
|
|
23
|
+
### Large_Requirements Dataset - Hot Cache
|
|
24
|
+
- **Fastest:** pysentry-pypi (0.657s) - 24.63x faster than slowest
|
|
25
|
+
- **Memory Efficient:** pysentry-osv (10.68 MB) - 10.06x less memory than highest
|
|
26
|
+
|
|
27
|
+
## Test Environment
|
|
28
|
+
|
|
29
|
+
- **Platform:** Linux-6.11.0-1018-azure-x86_64-with-glibc2.39
|
|
30
|
+
- **Python Version:** 3.11.13
|
|
31
|
+
- **CPU Cores:** 4
|
|
32
|
+
- **Total Memory:** 15.62 GB
|
|
33
|
+
- **Available Memory:** 14.62 GB
|
|
34
|
+
|
|
35
|
+
## Performance Comparison
|
|
36
|
+
|
|
37
|
+
### Small_Requirements Dataset - Cold Cache
|
|
38
|
+
|
|
39
|
+
#### Execution Time Comparison
|
|
40
|
+
|
|
41
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
42
|
+
|---------------------|---------------------|---------------------|
|
|
43
|
+
| 🥇 pysentry-pypi | 0.306s | 1.00x |
|
|
44
|
+
| 🥈 pysentry-osv | 0.992s | 3.24x |
|
|
45
|
+
| pysentry-pypa | 1.225s | 4.00x |
|
|
46
|
+
| pysentry-all-sources | 1.238s | 4.04x |
|
|
47
|
+
| pip-audit-default | 8.785s | 28.70x |
|
|
48
|
+
|
|
49
|
+
#### Memory Usage Comparison
|
|
50
|
+
|
|
51
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
52
|
+
|---------------------|---------------------|---------------------|
|
|
53
|
+
| 🥇 pysentry-osv | 10.63 MB | 1.00x |
|
|
54
|
+
| 🥈 pysentry-pypi | 12.06 MB | 1.13x |
|
|
55
|
+
| pip-audit-default | 45.50 MB | 4.28x |
|
|
56
|
+
| pysentry-pypa | 73.88 MB | 6.95x |
|
|
57
|
+
| pysentry-all-sources | 107.95 MB | 10.15x |
|
|
58
|
+
|
|
59
|
+
### Small_Requirements Dataset - Hot Cache
|
|
60
|
+
|
|
61
|
+
#### Execution Time Comparison
|
|
62
|
+
|
|
63
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
64
|
+
|---------------------|---------------------|---------------------|
|
|
65
|
+
| 🥇 pysentry-pypi | 0.224s | 1.00x |
|
|
66
|
+
| 🥈 pysentry-pypa | 1.027s | 4.59x |
|
|
67
|
+
| pysentry-all-sources | 1.136s | 5.08x |
|
|
68
|
+
| pysentry-osv | 1.142s | 5.11x |
|
|
69
|
+
| pip-audit-default | 8.165s | 36.53x |
|
|
70
|
+
|
|
71
|
+
#### Memory Usage Comparison
|
|
72
|
+
|
|
73
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
74
|
+
|---------------------|---------------------|---------------------|
|
|
75
|
+
| 🥇 pysentry-osv | 10.78 MB | 1.00x |
|
|
76
|
+
| 🥈 pysentry-pypi | 12.29 MB | 1.14x |
|
|
77
|
+
| pip-audit-default | 44.93 MB | 4.17x |
|
|
78
|
+
| pysentry-pypa | 74.12 MB | 6.88x |
|
|
79
|
+
| pysentry-all-sources | 106.62 MB | 9.89x |
|
|
80
|
+
|
|
81
|
+
### Large_Requirements Dataset - Cold Cache
|
|
82
|
+
|
|
83
|
+
#### Execution Time Comparison
|
|
84
|
+
|
|
85
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
86
|
+
|---------------------|---------------------|---------------------|
|
|
87
|
+
| 🥇 pysentry-pypi | 0.996s | 1.00x |
|
|
88
|
+
| 🥈 pysentry-pypa | 1.328s | 1.33x |
|
|
89
|
+
| pysentry-osv | 3.112s | 3.13x |
|
|
90
|
+
| pysentry-all-sources | 3.483s | 3.50x |
|
|
91
|
+
| pip-audit-default | 18.476s | 18.56x |
|
|
92
|
+
|
|
93
|
+
#### Memory Usage Comparison
|
|
94
|
+
|
|
95
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
96
|
+
|---------------------|---------------------|---------------------|
|
|
97
|
+
| 🥇 pysentry-osv | 10.98 MB | 1.00x |
|
|
98
|
+
| 🥈 pysentry-pypi | 13.16 MB | 1.20x |
|
|
99
|
+
| pip-audit-default | 47.48 MB | 4.32x |
|
|
100
|
+
| pysentry-pypa | 72.94 MB | 6.64x |
|
|
101
|
+
| pysentry-all-sources | 103.27 MB | 9.40x |
|
|
102
|
+
|
|
103
|
+
### Large_Requirements Dataset - Hot Cache
|
|
104
|
+
|
|
105
|
+
#### Execution Time Comparison
|
|
106
|
+
|
|
107
|
+
| Tool Configuration | Execution Time | Relative Performance |
|
|
108
|
+
|---------------------|---------------------|---------------------|
|
|
109
|
+
| 🥇 pysentry-pypi | 0.657s | 1.00x |
|
|
110
|
+
| 🥈 pysentry-pypa | 1.518s | 2.31x |
|
|
111
|
+
| pysentry-all-sources | 3.055s | 4.65x |
|
|
112
|
+
| pysentry-osv | 3.429s | 5.22x |
|
|
113
|
+
| pip-audit-default | 16.172s | 24.63x |
|
|
114
|
+
|
|
115
|
+
#### Memory Usage Comparison
|
|
116
|
+
|
|
117
|
+
| Tool Configuration | Peak Memory | Relative Performance |
|
|
118
|
+
|---------------------|---------------------|---------------------|
|
|
119
|
+
| 🥇 pysentry-osv | 10.68 MB | 1.00x |
|
|
120
|
+
| 🥈 pysentry-pypi | 13.18 MB | 1.23x |
|
|
121
|
+
| pip-audit-default | 48.80 MB | 4.57x |
|
|
122
|
+
| pysentry-pypa | 72.41 MB | 6.78x |
|
|
123
|
+
| pysentry-all-sources | 107.36 MB | 10.06x |
|
|
124
|
+
|
|
125
|
+
## Detailed Analysis
|
|
126
|
+
|
|
127
|
+
### Pysentry Performance
|
|
128
|
+
|
|
129
|
+
- **Execution Time:** Avg: 1.554s, Min: 0.224s, Max: 3.483s
|
|
130
|
+
|
|
131
|
+
- **Memory Usage:** Avg: 50.77 MB, Min: 10.63 MB, Max: 107.95 MB
|
|
132
|
+
|
|
133
|
+
- **Success Rate:** 100.0% (16/16)
|
|
134
|
+
|
|
135
|
+
### Pip-Audit Performance
|
|
136
|
+
|
|
137
|
+
- **Execution Time:** Avg: 12.899s, Min: 8.165s, Max: 18.476s
|
|
138
|
+
|
|
139
|
+
- **Memory Usage:** Avg: 46.68 MB, Min: 44.93 MB, Max: 48.80 MB
|
|
140
|
+
|
|
141
|
+
- **Success Rate:** 100.0% (4/4)
|