In 2026, a dataset mapping vulnerabilities across major package managers identified 270,430 known vulnerabilities linked to Python package versions on PyPI — and 141,044 packages that permit at least one vulnerable dependency version within their declared ranges. Yet many Python developers still rely on a single tool, run once in CI, and call it done. Three tools dominate the Python dependency security landscape: pip-audit, Safety CLI, and OSV-Scanner. Each has a different database, a different model, and a different answer to the question “which packages in my environment are vulnerable?” This guide gives you the full comparison — and tells you exactly how to wire each one into your CI/CD pipeline in 2026.

En 2026, un dataset cartographiant les vulnérabilités dans les principaux gestionnaires de packages a recensé 270 430 vulnérabilités connues liées à des versions de packages Python sur PyPI — et 141 044 packages qui autorisent au moins une version dépendante vulnérable dans leurs plages déclarées. Pourtant, beaucoup de développeurs Python se contentent d’un seul outil, exécuté une fois en CI. Trois outils dominent le paysage de la sécurité des dépendances Python : pip-audit, Safety CLI et OSV-Scanner. Chacun repose sur une base de données différente et répond différemment à la question « quels packages dans mon environnement sont vulnérables ? » Ce guide vous donne la comparaison complète et explique comment intégrer chacun dans votre pipeline CI/CD en 2026.

270K+
Known vulnerabilities linked to PyPI versions
Vulnérabilités connues liées aux versions PyPI
Source: ScienceDirect / PMC dataset, 2025
141K
PyPI packages permitting at least one vulnerable version range
Packages PyPI autorisant au moins une plage de version vulnérable
Source: ScienceDirect / PMC dataset, 2025
+15%
Increase in reported Python package vulnerabilities in 2026 vs 2025
Hausse des vulnérabilités packages Python signalées en 2026 vs 2025
Source: NVD Dashboard trend, 2026

pip-audit 2.10.0 — The PyPA Standard

pip-audit 2.10.0 — Le Standard PyPA

pip-audit is the official Python dependency auditor maintained by PyPA (Python Packaging Authority) with backing from Trail of Bits and Google. Version 2.10.0, released December 1, 2025, is the current stable release and brings several important additions for modern Python workflows.

pip-audit est l’auditeur officiel de dépendances Python maintenu par PyPA (Python Packaging Authority) avec le soutien de Trail of Bits et Google. La version 2.10.0, publiée le 1er décembre 2025, est la version stable actuelle et apporte plusieurs ajouts importants pour les workflows Python modernes.

What’s new in pip-audit 2.10.0

Nouveautés de pip-audit 2.10.0

The most significant addition is PEP 751 lockfile support: passing --locked to pip-audit now audits pylock.toml files — the new standardized Python lockfile format. pip-audit also gains support for the Ecosyste.ms vulnerability service (--vulnerability-service=esms), a federated source that aggregates advisories beyond the default OSV database. Additionally, vulnerability aliases are now included in JSON output automatically, and in other formats when --aliases is specified — useful when your security policy tracks advisories by GHSA or CVE ID interchangeably.

L’ajout le plus significatif est le support des lockfiles PEP 751 : passer --locked à pip-audit permet d’auditer les fichiers pylock.toml — le nouveau format standardisé de lockfile Python. pip-audit intègre également le service de vulnérabilités Ecosyste.ms (--vulnerability-service=esms), une source fédérée qui agrège les advisories au-delà de la base OSV par défaut. Les alias de vulnérabilités sont désormais inclus automatiquement dans la sortie JSON, et dans les autres formats avec --aliases — utile quand votre politique de sécurité suit les advisories par GHSA ou CVE de façon interchangeable.

Core pip-audit commands

Commandes pip-audit essentielles

# Install
pip install pip-audit

# Audit current environment
pip-audit

# Audit a requirements file
pip-audit -r requirements.txt

# Audit a PEP 751 lockfile (pip-audit 2.10+)
pip-audit --locked

# Audit a poetry.lock / pylock.toml project
pip-audit --requirement pylock.toml

# JSON output with CVE aliases
pip-audit --format json --aliases -r requirements.txt

# Auto-fix: upgrade vulnerable packages
pip-audit --fix -r requirements.txt

# Use Ecosyste.ms as additional source
pip-audit --vulnerability-service=esms -r requirements.txt

# Ignore a specific vulnerability (with expiry)
pip-audit --ignore-vuln GHSA-xxxx-yyyy-zzzz -r requirements.txt

pip-audit queries the OSV.dev database by default, which aggregates advisories from NVD, GitHub Security Advisories, and PyPI’s own advisory database. Independent benchmarks show pip-audit achieves 98% CVE recall against the OSV database — the highest coverage among open-source Python scanners. It resolves transitive dependencies by default; you should never pass --no-deps unless you are explicitly auditing a flat list of pinned versions.

pip-audit interroge la base OSV.dev par défaut, qui agrège les advisories de NVD, GitHub Security Advisories et la propre base de données advisory de PyPI. Des benchmarks indépendants montrent que pip-audit atteint un rappel CVE de 98% sur la base OSV — la meilleure couverture parmi les scanners Python open-source. Il résout les dépendances transitives par défaut ; ne passez jamais --no-deps sauf si vous auditez explicitement une liste plate de versions pinées.

Lock file scanning tip: Always scan your lockfile (requirements.txt with hashes, pylock.toml, or uv.lock) rather than just pyproject.toml. The lockfile contains the exact resolved versions — scanning only the top-level manifest misses transitive vulnerabilities.

Astuce lockfile : Scannez toujours votre lockfile (requirements.txt avec hashes, pylock.toml ou uv.lock) plutôt que le seul pyproject.toml. Le lockfile contient les versions exactes résolues — scanner uniquement le manifest de haut niveau manque les vulnérabilités transitives.

Safety CLI 3.7.0 — Freemium Multi-Ecosystem Scanner

Safety CLI 3.7.0 — Scanner Multi-Écosystème Freemium

Safety CLI, maintained by SafetyCLI (formerly PyUp.io), is the other major Python vulnerability scanner. Version 3.7.0 is the current release. The key differentiator is Safety’s proprietary vulnerability database, which the company claims covers 3× more vulnerabilities than competitors including Dependabot, pip-audit, Snyk, and OSV. This is possible because Safety’s team manually curates advisories from sources not yet indexed by NVD or GitHub, often publishing earlier.

Safety CLI, maintenu par SafetyCLI (anciennement PyUp.io), est l’autre grand scanner de vulnérabilités Python. La version 3.7.0 est la version actuelle. Le différenciateur clé est la base de données propriétaire de Safety, que l’entreprise affirme couvrir 3× plus de vulnérabilités que ses concurrents, dont Dependabot, pip-audit, Snyk et OSV. C’est possible grâce à une équipe qui curate manuellement des advisories de sources pas encore indexées par NVD ou GitHub, publiant souvent plus tôt.

Safety CLI 3 key features

Fonctionnalités clés de Safety CLI 3

Safety 3 added a scan command that recursively finds all Python dependency files in a directory — supporting requirements*.txt, poetry.lock, Pipfile.lock, setup.cfg, and pyproject.toml. It outputs results in JSON, HTML, SBOM (CycloneDX), and text formats. Safety 3 also supports JavaScript packages (npm/yarn/pnpm/conda), making it a semi-polyglot tool if your team uses Python and Node.js together.

Safety 3 a ajouté une commande scan qui trouve récursivement tous les fichiers de dépendances Python dans un répertoire — supportant requirements*.txt, poetry.lock, Pipfile.lock, setup.cfg et pyproject.toml. Il produit les résultats en JSON, HTML, SBOM (CycloneDX) et texte. Safety 3 supporte aussi les packages JavaScript (npm/yarn/pnpm/conda), en faisant un outil semi-polyglotte si votre équipe utilise Python et Node.js ensemble.

# Install Safety CLI
pip install safety

# Scan a requirements file
safety scan -r requirements.txt

# Scan the entire project directory
safety scan

# JSON output for CI parsing
safety scan --output json

# SBOM output (CycloneDX)
safety scan --output sbom

# Disable telemetry (recommended in CI)
safety scan --disable-telemetry -r requirements.txt

# Check a specific package
safety check --package requests==2.28.0

Freemium limit to know: Safety’s free tier provides basic vulnerability detection but limits database update frequency. The commercial tier adds malicious package detection (typosquatting, protestware), policy management, and authenticated CI scans with the full advisory database. For teams with a budget, the paid plan is worth it for earlier advisory access. For fully open-source workflows, pip-audit + OSV-Scanner covers most needs without an account.

Limite freemium à connaître : Le tier gratuit de Safety fournit une détection basique mais limite la fréquence de mise à jour de la base. Le tier commercial ajoute la détection de packages malveillants (typosquatting, protestware), la gestion de politiques et des scans CI authentifiés avec la base complète. Pour les équipes avec un budget, le plan payé vaut le coût pour un accès anticipé aux advisories. Pour les workflows full open-source, pip-audit + OSV-Scanner couvre la plupart des besoins sans compte.

OSV-Scanner V2 — Google’s Polyglot Answer

OSV-Scanner V2 — La Réponse Polyglotte de Google

OSV-Scanner, maintained by Google’s Open Source Security Team, is built on top of the osv.dev database — the largest open-source vulnerability database, aggregating advisories from NVD, GitHub, PyPI, RubyGems, Go, Rust, npm, and dozens more. OSV-Scanner V2, released in 2026, adds layer-aware container image scanning for Debian, Ubuntu, and Alpine, and guided remediation: it suggests the minimum upgrade path across your full dependency graph to fix the most vulnerabilities with the fewest changes.

OSV-Scanner, maintenu par l’équipe Open Source Security de Google, est construit sur la base osv.dev — la plus grande base de données de vulnérabilités open-source, agrégeant les advisories de NVD, GitHub, PyPI, RubyGems, Go, Rust, npm et des dizaines d’autres. OSV-Scanner V2, sorti en 2026, ajoute le scan d’images container avec conscience des couches pour Debian, Ubuntu et Alpine, et la remédiation guidée : il suggère le chemin de mise à jour minimum sur l’ensemble de votre graphe de dépendances pour corriger le maximum de vulnérabilités avec le moins de changements.

# Install via Go
go install github.com/google/osv-scanner/cmd/osv-scanner@latest

# Or download binary from GitHub releases
# https://github.com/google/osv-scanner/releases

# Scan current directory recursively
osv-scanner scan --recursive .

# Scan a requirements.txt
osv-scanner scan --lockfile requirements.txt

# Scan a pyproject.toml with lockfile
osv-scanner scan --lockfile poetry.lock

# JSON output
osv-scanner scan --format json --recursive .

# Guided remediation (interactive)
osv-scanner fix --non-interactive --lockfile requirements.txt

# Scan a Docker image (V2 feature)
osv-scanner scan --docker python:3.12-slim

The key advantage of OSV-Scanner for Python teams is its polyglot reach: a single command scans your Python lockfiles and your package.json, go.mod, Cargo.lock, or pom.xml in one pass. This is invaluable for full-stack teams and agencies maintaining diverse technology stacks. For Python-only projects, pip-audit remains faster and more idiomatic — but if you are scanning multiple ecosystems, OSV-Scanner eliminates tool sprawl.

L’avantage clé d’OSV-Scanner pour les équipes Python est sa portée polyglotte : une seule commande scanne vos lockfiles Python et votre package.json, go.mod, Cargo.lock ou pom.xml en une seule passe. C’est inéstimable pour les équipes full-stack et les agences qui maintiennent des stacks technologiques variés. Pour les projets Python seuls, pip-audit reste plus rapide et plus idiomatique — mais si vous scannez plusieurs écosystèmes, OSV-Scanner élimine la multiplication des outils.

pip-audit vs Safety vs OSV-Scanner: Full Comparison Table

pip-audit vs Safety vs OSV-Scanner : Tableau Comparatif Complet

Feature Fonctionnalité pip-audit 2.10 Safety CLI 3.7 OSV-Scanner V2
License / Cost Licence / Coût Apache 2.0 / Free MIT / Freemium Apache 2.0 / Free
Vulnerability database Base de vulnérabilités OSV.dev + PyPI Advisory DB Proprietary (curated) + NVD OSV.dev (NVD, GHSA, PyPI, Go, npm, Rust…)
Python ecosystems Écosystèmes Python pip, uv, poetry, pylock.toml pip, poetry, Pipenv, uv, conda pip, poetry, uv, conda
Polyglot support Support polyglotte Python only Python + npm/yarn/pnpm Python, npm, Go, Rust, Java, Ruby…
Transitive deps scan Scan des déps transitives Yes (default) Yes Yes (via lockfile)
Auto-fix Correction automatique Yes (--fix) Paid plan Yes (osv-scanner fix)
SBOM output Sortie SBOM CycloneDX via extras CycloneDX built-in CycloneDX built-in
Container image scan Scan image container No No Yes (layer-aware, V2)
Malicious pkg detection Détection packages malveillants No Paid plan No
GitHub Action available GitHub Action disponible Yes (official) Yes Yes (official)
CVE recall (OSV) Rappel CVE (OSV) ~98% ~96% + extras ~98%

CI/CD Integration: GitHub Actions Recipes

Intégration CI/CD : Recettes GitHub Actions

The right integration strategy depends on your stack. Here are battle-tested GitHub Actions workflows for each tool in 2026, following current security best practices (pinned action hashes, least-privilege permissions, fail-on-vuln gates).

La bonne stratégie d’intégration dépend de votre stack. Voici des workflows GitHub Actions éprouvés pour chaque outil en 2026, respectant les bonnes pratiques actuelles (hashes d’actions pinés, permissions minimales, portes fail-on-vuln).

pip-audit in GitHub Actions (official action)

pip-audit dans GitHub Actions (action officielle)

# .github/workflows/security-audit.yml
name: Python Security Audit

on:
  push:
    branches: [main]
  pull_request:
  schedule:
    - cron: '0 8 * * 1'  # Weekly Monday scan

permissions:
  contents: read

jobs:
  pip-audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: Install dependencies
        run: pip install -r requirements.txt

      - name: Run pip-audit
        uses: pypa/gh-action-pip-audit@v1.1.0
        with:
          inputs: requirements.txt
          # Fails the workflow if any vulnerability is found
          vulnerability-service: osv

OSV-Scanner for polyglot projects

OSV-Scanner pour projets polyglottes

# .github/workflows/osv-scan.yml
name: OSV Vulnerability Scan

on:
  push:
  pull_request:
  schedule:
    - cron: '0 9 * * 2'

permissions:
  contents: read
  security-events: write  # For SARIF upload to GitHub Security

jobs:
  osv-scanner:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Run OSV-Scanner
        uses: google/osv-scanner-action@v2
        with:
          scan-args: |-
            --recursive
            --format sarif
            --output osv-results.sarif
            .

      - name: Upload SARIF to GitHub Security
        uses: github/codeql-action/upload-sarif@v3
        if: always()
        with:
          sarif_file: osv-results.sarif

Uploading SARIF results to GitHub Security tab is a key advantage of OSV-Scanner: it surfaces vulnerabilities directly in Pull Request reviews and the repository’s Security → Code Scanning section, with no additional tooling needed.

L’upload des résultats SARIF dans le tab GitHub Security est un avantage clé d’OSV-Scanner : il expose les vulnérabilités directement dans les revues de Pull Requests et la section Sécurité → Analyse de code du dépôt, sans outillage supplémentaire.

PyPI Trusted Publishers: Securing Your Release Pipeline

PyPI Trusted Publishers : Sécuriser Votre Pipeline de Publication

Scanning your dependencies is only half the picture. If you publish to PyPI, your release pipeline is also an attack surface. PyPI Trusted Publishers (OIDC-based publishing) eliminates long-lived API tokens from your CI secrets — the same class of credential theft that enabled the 2026 TanStack supply chain attack and the Bitwarden CLI backdoor.

Scanner vos dépendances n’est que la moitié du tableau. Si vous publiez sur PyPI, votre pipeline de publication est aussi une surface d’attaque. Les PyPI Trusted Publishers (publication via OIDC) éliminent les tokens API long-durée de vos secrets CI — la même classe de vol de credentials qui a permis l’attaque supply chain TanStack 2026 et le backdoor Bitwarden CLI.

How it works: when your GitHub Actions workflow publishes to PyPI, it requests a short-lived OIDC token scoped to that specific workflow run. PyPI matches the token against your project’s configured Trusted Publisher, mints a temporary API token, and the token expires automatically when the job ends. No secret to store, no token to rotate, no long-lived credential to steal.

Comment ça fonctionne : quand votre workflow GitHub Actions publie sur PyPI, il demande un token OIDC à courte durée de vie scopeé à ce run de workflow spécifique. PyPI fait correspondre le token avec le Trusted Publisher configuré pour votre projet, crée un token API temporaire, et le token expire automatiquement quand le job se termine. Aucun secret à stocker, aucun token à effectuer une rotation, aucun credential long-terme à voler.

# .github/workflows/publish.yml
name: Publish to PyPI

on:
  release:
    types: [published]

permissions:
  contents: read
  id-token: write  # Required for OIDC token request

jobs:
  publish:
    runs-on: ubuntu-latest
    environment: release  # Requires manual approval (best practice)
    steps:
      - uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: Build distribution
        run: |
          pip install build
          python -m build

      - name: Publish to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1
        # No API token needed — OIDC handles authentication
        # Register this workflow as a Trusted Publisher at pypi.org first

Critical offboarding note: Trusted Publishers are registered to projects, not to users. Removing a maintainer from your PyPI project does NOT automatically remove any Trusted Publishers they registered. Always audit your project’s Trusted Publishers list when offboarding a collaborator.

Note d’offboarding critique : Les Trusted Publishers sont enregistrés sur les projets, pas sur les utilisateurs. Retirer un mainteneur de votre projet PyPI ne supprime PAS automatiquement les Trusted Publishers qu’il a enregistrés. Auditez toujours la liste des Trusted Publishers de votre projet lors du départ d’un collaborateur.

Which Tool to Use: A Decision Guide for 2026

Quel Outil Choisir : Guide de Décision 2026

There is no universally best tool — the right choice depends on your team’s stack, budget, and risk profile. Here is the decision matrix:

Il n’existe pas de meilleur outil universel — le bon choix dépend du stack, du budget et du profil de risque de votre équipe. Voici la matrice de décision :

  • Python-only team, fully open-source, tight CI : use pip-audit. It is maintained by PyPA, free forever, integrates in 3 lines of GitHub Actions, and resolves transitive dependencies correctly. Add --aliases and --format json for machine-readable output.
  • Équipe Python seule, full open-source, CI serré : utilisez pip-audit. Maintenu par PyPA, gratuit à vie, intègre en 3 lignes de GitHub Actions et résout les dépendances transitives correctement. Ajoutez --aliases et --format json pour une sortie lisible par machine.
  • Full-stack team or agency (Python + Node.js + Go + others) : use OSV-Scanner. One tool, one SARIF report, all ecosystems. The SARIF upload to GitHub Security tab is worth it alone.
  • Équipe full-stack ou agence (Python + Node.js + Go + autres) : utilisez OSV-Scanner. Un seul outil, un rapport SARIF, tous les écosystèmes. L’upload SARIF dans l’onglet GitHub Security en vaut seul la peine.
  • Team needing earliest-possible advisory detection : add Safety CLI (paid plan) alongside pip-audit. Safety’s curated database surfaces advisories before they reach NVD/OSV, which matters for zero-day response time.
  • Équipe ayant besoin de la détection d’advisories la plus rapide : ajoutez Safety CLI (plan payé) en complément de pip-audit. La base curate de Safety expose les advisories avant qu’elles atteignent NVD/OSV, ce qui compte pour le temps de réponse aux zero-days.
  • Best practice for everyone: layer all three. pip-audit as the fast, idiomatic gate in every PR. OSV-Scanner weekly for polyglot coverage. CVE OptiBot for continuous monitoring that alerts you when a new CVE drops for a package already in production — even between CI runs.
  • Meilleure pratique pour tous : cumulez les trois. pip-audit comme porte rapide et idiomatique sur chaque PR. OSV-Scanner hebdomadairement pour la couverture polyglotte. CVE OptiBot pour le monitoring continu qui vous alerte quand une nouvelle CVE touche un package déjà en production — même entre les exécutions CI.

Frequently Asked Questions

Questions Fréquentes

Is pip-audit better than Safety CLI?

pip-audit est-il meilleur que Safety CLI ?

For open-source, fully free workflows, pip-audit is the preferred choice: it is maintained by PyPA, free forever, and achieves ~98% CVE recall from the OSV database. Safety CLI’s proprietary database catches some advisories earlier, but the full benefit requires a paid plan. The tools are complementary, not competitors.

Pour les workflows open-source et entièrement gratuits, pip-audit est le choix préféré : maintenu par PyPA, gratuit à vie, ~98% de rappel CVE depuis la base OSV. La base propriétaire de Safety détecte certains advisories plus tôt, mais le bénéfice complet nécessite un plan payé. Les deux outils sont complémentaires, pas concurrents.

Does pip-audit scan transitive dependencies?

pip-audit scanne-t-il les dépendances transitives ?

Yes. pip-audit resolves and audits the full transitive dependency tree by default. Never pass --no-deps unless you are auditing a flat, fully-pinned requirements file with no transitive packages. When scanning a requirements.txt generated with pip-compile or uv pip compile, all transitive dependencies are already included and pip-audit will check every one.

Oui. pip-audit résout et audite l’arbre complet des dépendances transitives par défaut. Ne passez jamais --no-deps sauf si vous auditez un fichier requirements plat et entièrement piné. Quand vous scannez un requirements.txt généré avec pip-compile ou uv pip compile, toutes les dépendances transitives sont déjà incluses et pip-audit les vérifiera toutes.

What is OSV-Scanner used for in Python projects?

A quoi sert OSV-Scanner dans les projets Python ?

OSV-Scanner is Google’s polyglot vulnerability scanner that scans any package lockfile format (requirements.txt, poetry.lock, package.json, go.sum, Cargo.lock, pom.xml…) in a single command. For Python-only projects, pip-audit is faster and more idiomatic. For full-stack repos, OSV-Scanner eliminates the need for one tool per language and uploads SARIF results directly to GitHub Security.

OSV-Scanner est le scanner polyglotte de Google qui scanne n’importe quel format de lockfile (requirements.txt, poetry.lock, package.json, go.sum, Cargo.lock, pom.xml…) en une seule commande. Pour les projets Python seuls, pip-audit est plus rapide et plus idiomatique. Pour les dépôts full-stack, OSV-Scanner élimine le besoin d’un outil par langage et upload les résultats SARIF directement dans GitHub Security.

How do PyPI Trusted Publishers prevent supply chain attacks?

Comment les PyPI Trusted Publishers préviennent-ils les attaques supply chain ?

Traditional PyPI publishing uses long-lived API tokens stored in CI secrets. If those secrets are stolen (via a compromised workflow, a malicious PR, or a leaked environment variable), an attacker can publish any version of your package. Trusted Publishers replace long-lived tokens with short-lived OIDC tokens scoped to a single workflow run. There is nothing to steal and nothing to rotate.

La publication PyPI traditionnelle utilise des tokens API long-durée de vie stockés dans les secrets CI. Si ces secrets sont volés (via un workflow compromis, une PR malveillante ou une variable d’environnement fuytée), un attaquant peut publier n’importe quelle version de votre package. Les Trusted Publishers remplacent les tokens long-terme par des tokens OIDC à courte durée de vie scopeés à un seul run de workflow. Rien à voler, rien à révoquer périodiquement.

Can pip-audit auto-fix vulnerabilities?

pip-audit peut-il corriger automatiquement les vulnérabilités ?

Yes. Running pip-audit --fix automatically upgrades vulnerable packages to the minimum fixed version. It modifies your virtual environment in place. For lockfile-based projects, you should regenerate the lockfile after a --fix run to keep it in sync: pip-compile requirements.in or uv pip compile after the fix. Always review the diff before committing.

Oui. Lancer pip-audit --fix met automatiquement à jour les packages vulnérables vers la version minimale corrigée. Il modifie votre environnement virtuel sur place. Pour les projets basés sur lockfile, regénérez le lockfile après un --fix pour le maintenir synchronisé : pip-compile requirements.in ou uv pip compile. Reviewez toujours le diff avant de committer.

What does “141,000 PyPI packages permit vulnerable version ranges” mean in practice?

Que signifie en pratique “141 000 packages PyPI autorisent des plages vulnérables” ?

When you specify requests>=2.25.0 in your pyproject.toml, you permit any version ≥2.25.0, including versions with known CVEs. pip-audit and Safety will flag those if they exist. The fix: always scan your lockfile (which pins exact resolved versions), run pip-audit in CI on every PR, and use a continuous monitoring tool that re-scans daily even when your code hasn’t changed.

Quand vous spécifiez requests>=2.25.0 dans votre pyproject.toml, vous autorisez toute version ≥2.25.0, y compris les versions avec des CVE connues. pip-audit et Safety les signaleront le cas échéant. La solution : scannez toujours votre lockfile (qui pin les versions exactes résolues), lancez pip-audit en CI sur chaque PR, et utilisez un outil de monitoring continu qui re-scanne quotidiennement même quand votre code n’a pas changé.

pip-audit runs in CI — but who alerts you between runs?

pip-audit tourne en CI — mais qui vous alerte entre les runs ?

A CVE can be published on a Thursday afternoon against a package you pinned three months ago. Your next CI run might not happen until Monday. CVE OptiBot scans your Python lockfiles daily and sends an immediate alert the moment a new vulnerability is disclosed for any dependency in your production environment — whether you last pushed code two days or two months ago.

Une CVE peut être publiée un jeudi après-midi sur un package que vous avez piné il y a trois mois. Votre prochain run CI ne surviendra peut-être que lundi. CVE OptiBot scanne vos lockfiles Python quotidiennement et envoie une alerte immédiate dès qu’une nouvelle vulnérabilité est divulguée pour n’importe quelle dépendance de votre environnement de production — que vous ayez pousé du code il y a deux jours ou deux mois.

Start free dependency monitoring Démarrer le monitoring gratuit