What pip audit does right

Let's give credit where it's due: pip audit is a genuinely useful tool. Developed by the Python Packaging Authority (PyPA), it checks your installed Python packages against the OSV vulnerability database and reports known CVEs. It's free, open-source, and integrates directly into the pip ecosystem.

Running it is dead simple:

$ pip audit
Found 2 known vulnerabilities in 1 package
Name    Version ID             Fix Versions
------- ------- -------------- ------------
urllib3 1.26.5  PYSEC-2023-212 1.26.18
urllib3 1.26.5  GHSA-v845-jxx5 1.26.18

Within seconds, you know which packages have known vulnerabilities and which version fixes them. For a quick sanity check during development, this is excellent. You can also pipe it into CI:

$ pip audit --require-hashes -r requirements.txt
$ pip audit --format=json | jq '.vulnerabilities | length'

If you're not running pip audit at all today, start now. It's better than nothing. But here's the problem: "better than nothing" is not the same as "enough."

The limitations of pip audit

1. It's manual by default

pip audit only runs when you tell it to. It doesn't watch your dependencies in the background. It doesn't notify you when a new CVE is published. If you ran it last Monday and a critical vulnerability was disclosed on Tuesday, you won't know until the next time you remember to run it.

Yes, you can schedule it in CI. But that means it only runs when you push code. If your project is stable and you haven't committed in weeks, no scan happens. Your dependencies are still vulnerable.

2. One project at a time

If you manage 5 projects, you need to run pip audit five times, in five different environments. If you manage 15, that's 15 separate runs. There's no aggregated view, no dashboard, no way to compare vulnerability status across projects at a glance.

# Project A
$ cd ~/projects/api-backend && pip audit

# Project B
$ cd ~/projects/data-pipeline && pip audit

# Project C
$ cd ~/projects/client-portal && pip audit

# ... repeat for every project you maintain

For a solo developer with one side project, this is fine. For a dev team or agency managing multiple client projects, it becomes unmanageable.

3. No history, no trends

pip audit gives you a snapshot. It tells you what's vulnerable right now. But it doesn't track whether things are getting better or worse over time. It can't show you that three months ago you had 0 vulnerabilities and now you have 12. It can't generate a report for a client showing your security posture trend.

4. No alerts, no notifications

There is no built-in mechanism to send you an email, a Slack message, or any kind of notification when a vulnerability affecting your dependencies is published. You have to actively check. And developers are busy. Active checking is the first thing that stops happening.

5. Only works with pip's own environment

By default, pip audit scans the current Python environment's installed packages. If you use Poetry, Pipenv, or PDM, you need different flags or different tools entirely:

# pip audit with requirements.txt
$ pip audit -r requirements.txt

# For Poetry projects, you need to export first
$ poetry export -f requirements.txt --output /tmp/req.txt
$ pip audit -r /tmp/req.txt

# For Pipenv, different tool entirely
$ pipenv check

Each tool has its own output format, its own quirks, its own vulnerability database. There's no unified view.

The gap between "auditing" and "monitoring"

This is the core distinction that matters. Auditing is a point-in-time check. Monitoring is a continuous process. They serve fundamentally different purposes.

Think of it like a health checkup. Going to the doctor once a year for bloodwork is auditing. Wearing a heart rate monitor that alerts you when something abnormal happens is monitoring. Both are useful. But only one catches the heart attack as it's happening.

In the Python dependency security world:

  • Auditing = running pip audit when you remember, or when CI triggers
  • Monitoring = a system that continuously watches your dependencies and alerts you the moment a new CVE affects them

Most teams only do auditing. They assume that because they ran a scan last sprint, they're safe. But vulnerabilities don't respect your sprint schedule.

A real scenario: the Tuesday CVE

Here's a scenario that happens more often than anyone admits:

Monday, 10:00 AM. You run pip audit on your production API. Clean bill of health. Zero vulnerabilities. You feel great.

Tuesday, 2:00 PM. A critical CVE is published for cryptography==41.0.3, the exact version pinned in your requirements.txt. It's a remote code execution vulnerability with a CVSS score of 9.8.

Wednesday through Friday. You're heads-down on a feature. No one runs pip audit. No one knows.

The following Monday. Maybe someone remembers to run it again. Maybe not. Your production server has been running vulnerable code for a week.

With continuous monitoring, you would have received an email alert on Tuesday at 2:01 PM. You would have known immediately. You could have patched before dinner.

Multi-tool fragmentation

The Python ecosystem doesn't have a single standard for dependency management. Different projects use different tools, and each comes with its own security story:

Tool Lockfile Security check
pip requirements.txt pip audit -r requirements.txt
Poetry poetry.lock Export + pip audit, or poetry audit (plugin)
Pipenv Pipfile.lock pipenv check (uses Safety DB)
PDM pdm.lock No built-in audit
conda environment.yml No built-in audit

If your agency manages 15 projects, some using Poetry, some using pip with requirements.txt, some using Pipenv, you're now juggling three different security tools with three different output formats and three different vulnerability databases. Good luck building a unified security dashboard from that.

What continuous monitoring looks like

Imagine a different workflow. Instead of running commands manually, you:

  1. Upload your lockfile oncerequirements.txt, poetry.lock, Pipfile.lock, whatever format you use
  2. The system scans daily — automatically, whether or not you push code
  3. You get an email when a new CVE affects one of your pinned dependencies
  4. You see a dashboard with all your projects, their vulnerability count, severity breakdown, and historical trends
  5. You generate a PDF report to share with clients or stakeholders who don't look at terminals

This is what the Python ecosystem is missing. Not another CLI tool that you run when you remember. A persistent monitoring layer that watches your dependencies even when you're not looking.

How OptiBot fills the gap

CVE OptiBot is built specifically for this problem. Here's what makes it different from running pip audit in a cron job:

Works with ALL Python lockfile formats

Upload a requirements.txt, a poetry.lock, or a Pipfile.lock. OptiBot parses them all. No exporting, no converting, no juggling tools. One upload, one dashboard.

Multi-project dashboard

See every project's security status on a single screen. Sort by severity. Filter by framework. Know instantly which project needs attention first. No more switching between terminals.

Daily automated scans

OptiBot scans your dependencies every day against the OSV.dev database — the same data source that powers pip audit, plus more. If a new CVE is published overnight, you know by morning.

Email alerts

When a new vulnerability is found, you get an email. Not a log entry buried in CI. Not a dashboard you have to check. An email in your inbox, with the CVE ID, severity score, affected package, and the version that fixes it.

PDF security reports

For agencies working with clients, OptiBot generates professional PDF reports. Show your clients that their dependencies are being monitored and that you're on top of security. Try doing that with pip audit --format=json.

When pip audit is enough vs. when you need more

Let's be fair: not every project needs continuous monitoring. Here's a simple decision framework:

pip audit is probably enough if:

  • You have one personal/hobby project
  • It's not running in production with real users or real data
  • You're actively developing it and running CI on every push
  • You don't need to report security status to anyone else

You need continuous monitoring if:

  • You have production applications serving real users
  • You manage multiple projects across different Python toolchains
  • You or your team don't push code every day to every project
  • You need to demonstrate security compliance to clients or auditors
  • You're an agency responsible for client application security
  • You handle sensitive data (PII, financial, healthcare)

The threshold is lower than most people think. If even one of those "need monitoring" criteria applies to you, the cost of not monitoring is far higher than the cost of setting it up.

The bottom line

pip audit is a valuable tool. Use it. But don't mistake it for a security strategy. A security strategy requires continuous monitoring, automated alerts, and visibility across all your projects. That's not what a CLI tool was designed to provide.

Your dependencies don't stop being vulnerable just because you stopped checking.

Ce que pip audit fait bien

Rendons a Cesar ce qui est a Cesar : pip audit est un outil genuinement utile. Developpe par la Python Packaging Authority (PyPA), il verifie vos packages Python installes par rapport a la base de donnees de vulnerabilites OSV et signale les CVE connues. Il est gratuit, open-source, et s'integre directement dans l'ecosysteme pip.

L'utiliser est extremement simple :

$ pip audit
Found 2 known vulnerabilities in 1 package
Name    Version ID             Fix Versions
------- ------- -------------- ------------
urllib3 1.26.5  PYSEC-2023-212 1.26.18
urllib3 1.26.5  GHSA-v845-jxx5 1.26.18

En quelques secondes, vous savez quels packages ont des vulnerabilites connues et quelle version les corrige. Pour une verification rapide pendant le developpement, c'est excellent. Vous pouvez aussi l'integrer dans votre CI :

$ pip audit --require-hashes -r requirements.txt
$ pip audit --format=json | jq '.vulnerabilities | length'

Si vous n'utilisez pas du tout pip audit aujourd'hui, commencez maintenant. C'est mieux que rien. Mais voila le probleme : "mieux que rien" n'est pas la meme chose que "suffisant".

Les limites de pip audit

1. C'est manuel par defaut

pip audit ne s'execute que quand vous le demandez. Il ne surveille pas vos dependances en arriere-plan. Il ne vous notifie pas quand une nouvelle CVE est publiee. Si vous l'avez lance lundi dernier et qu'une vulnerabilite critique a ete divulguee mardi, vous ne le saurez pas avant la prochaine fois ou vous penserez a le lancer.

Oui, vous pouvez le planifier dans votre CI. Mais cela signifie qu'il ne s'execute que quand vous poussez du code. Si votre projet est stable et que vous n'avez pas commite depuis des semaines, aucun scan ne se produit. Vos dependances restent vulnerables.

2. Un seul projet a la fois

Si vous gerez 5 projets, vous devez executer pip audit cinq fois, dans cinq environnements differents. Si vous en gerez 15, ce sont 15 executions separees. Il n'y a pas de vue agregee, pas de tableau de bord, aucun moyen de comparer le statut de vulnerabilite de tous vos projets d'un seul coup d'oeil.

# Projet A
$ cd ~/projects/api-backend && pip audit

# Projet B
$ cd ~/projects/data-pipeline && pip audit

# Projet C
$ cd ~/projects/client-portal && pip audit

# ... a repeter pour chaque projet que vous maintenez

Pour un developpeur solo avec un projet personnel, ca passe. Pour une equipe ou une agence qui gere plusieurs projets clients, ca devient intenable.

3. Pas d'historique, pas de tendances

pip audit vous donne un instantane. Il vous dit ce qui est vulnerable en ce moment. Mais il ne suit pas l'evolution dans le temps. Il ne peut pas vous montrer qu'il y a trois mois vous aviez 0 vulnerabilites et que maintenant vous en avez 12. Il ne peut pas generer un rapport pour un client montrant la tendance de votre posture de securite.

4. Pas d'alertes, pas de notifications

Il n'y a aucun mecanisme integre pour vous envoyer un email, un message Slack, ou un quelconque type de notification quand une vulnerabilite affectant vos dependances est publiee. Vous devez verifier activement. Et les developpeurs sont occupes. La verification active est la premiere chose qui s'arrete.

5. Ne fonctionne qu'avec l'environnement pip

Par defaut, pip audit scanne les packages installes dans l'environnement Python courant. Si vous utilisez Poetry, Pipenv, ou PDM, vous avez besoin de flags differents ou d'outils completement differents :

# pip audit avec requirements.txt
$ pip audit -r requirements.txt

# Pour les projets Poetry, il faut exporter d'abord
$ poetry export -f requirements.txt --output /tmp/req.txt
$ pip audit -r /tmp/req.txt

# Pour Pipenv, un outil different
$ pipenv check

Chaque outil a son propre format de sortie, ses propres particularites, sa propre base de donnees de vulnerabilites. Il n'y a pas de vue unifiee.

L'ecart entre "auditer" et "monitorer"

C'est la distinction fondamentale qui compte. Auditer, c'est un controle ponctuel. Monitorer, c'est un processus continu. Ils servent des objectifs fondamentalement differents.

Pensez-y comme un bilan de sante. Aller chez le medecin une fois par an pour une prise de sang, c'est un audit. Porter un moniteur cardiaque qui vous alerte quand quelque chose d'anormal se produit, c'est du monitoring. Les deux sont utiles. Mais un seul detecte la crise cardiaque au moment ou elle se produit.

Dans le monde de la securite des dependances Python :

  • Auditer = executer pip audit quand vous y pensez, ou quand la CI se declenche
  • Monitorer = un systeme qui surveille en continu vos dependances et vous alerte des qu'une nouvelle CVE les affecte

La plupart des equipes ne font que de l'audit. Elles supposent que parce qu'elles ont lance un scan au dernier sprint, elles sont en securite. Mais les vulnerabilites ne respectent pas votre calendrier de sprint.

Un scenario reel : la CVE du mardi

Voici un scenario qui se produit plus souvent que quiconque ne l'admet :

Lundi, 10h00. Vous lancez pip audit sur votre API de production. Bilan de sante impeccable. Zero vulnerabilite. Vous vous sentez bien.

Mardi, 14h00. Une CVE critique est publiee pour cryptography==41.0.3, exactement la version epinglee dans votre requirements.txt. C'est une vulnerabilite d'execution de code a distance avec un score CVSS de 9.8.

Mercredi a vendredi. Vous etes plonge dans une fonctionnalite. Personne ne lance pip audit. Personne ne sait.

Le lundi suivant. Peut-etre que quelqu'un pensera a le relancer. Peut-etre pas. Votre serveur de production a execute du code vulnerable pendant une semaine.

Avec du monitoring continu, vous auriez recu une alerte email mardi a 14h01. Vous auriez su immediatement. Vous auriez pu patcher avant le diner.

La fragmentation multi-outils

L'ecosysteme Python n'a pas de standard unique pour la gestion des dependances. Differents projets utilisent differents outils, et chacun a sa propre histoire en matiere de securite :

Outil Fichier de lock Verification securite
pip requirements.txt pip audit -r requirements.txt
Poetry poetry.lock Export + pip audit, ou poetry audit (plugin)
Pipenv Pipfile.lock pipenv check (utilise Safety DB)
PDM pdm.lock Pas d'audit integre
conda environment.yml Pas d'audit integre

Si votre agence gere 15 projets, certains utilisant Poetry, d'autres pip avec requirements.txt, d'autres Pipenv, vous jonglez maintenant avec trois outils de securite differents, trois formats de sortie differents et trois bases de donnees de vulnerabilites differentes. Bonne chance pour construire un tableau de bord de securite unifie a partir de tout ca.

A quoi ressemble le monitoring continu

Imaginez un workflow different. Au lieu de lancer des commandes manuellement, vous :

  1. Importez votre fichier de lock une seule foisrequirements.txt, poetry.lock, Pipfile.lock, quel que soit le format que vous utilisez
  2. Le systeme scanne quotidiennement — automatiquement, que vous poussiez du code ou non
  3. Vous recevez un email quand une nouvelle CVE affecte l'une de vos dependances epinglees
  4. Vous voyez un tableau de bord avec tous vos projets, leur nombre de vulnerabilites, la repartition par severite, et les tendances historiques
  5. Vous generez un rapport PDF a partager avec les clients ou parties prenantes qui ne regardent pas les terminaux

C'est ce qui manque a l'ecosysteme Python. Pas un autre outil CLI que vous lancez quand vous y pensez. Une couche de monitoring persistante qui surveille vos dependances meme quand vous ne regardez pas.

Comment OptiBot comble le vide

CVE OptiBot est construit specifiquement pour ce probleme. Voici ce qui le differencie d'un pip audit lance dans un cron job :

Compatible avec TOUS les formats de lockfile Python

Importez un requirements.txt, un poetry.lock, ou un Pipfile.lock. OptiBot les parse tous. Pas d'export, pas de conversion, pas de jonglage entre outils. Un seul import, un seul tableau de bord.

Tableau de bord multi-projets

Voyez le statut de securite de chaque projet sur un seul ecran. Triez par severite. Filtrez par framework. Sachez instantanement quel projet necessite votre attention en premier. Plus besoin de basculer entre les terminaux.

Scans automatises quotidiens

OptiBot scanne vos dependances chaque jour contre la base de donnees OSV.dev — la meme source de donnees qui alimente pip audit, et plus encore. Si une nouvelle CVE est publiee pendant la nuit, vous le savez au matin.

Alertes email

Quand une nouvelle vulnerabilite est trouvee, vous recevez un email. Pas une ligne de log enterree dans la CI. Pas un tableau de bord que vous devez verifier. Un email dans votre boite de reception, avec l'identifiant CVE, le score de severite, le package affecte, et la version qui corrige le probleme.

Rapports de securite PDF

Pour les agences travaillant avec des clients, OptiBot genere des rapports PDF professionnels. Montrez a vos clients que leurs dependances sont surveillees et que vous gerez la securite. Essayez de faire ca avec pip audit --format=json.

Quand pip audit suffit vs. quand vous avez besoin de plus

Soyons honnetes : tous les projets n'ont pas besoin de monitoring continu. Voici un cadre de decision simple :

pip audit suffit probablement si :

  • Vous avez un seul projet personnel/hobby
  • Il ne tourne pas en production avec de vrais utilisateurs ou de vraies donnees
  • Vous le developpez activement et la CI tourne a chaque push
  • Vous n'avez pas besoin de rapporter le statut de securite a qui que ce soit

Vous avez besoin de monitoring continu si :

  • Vous avez des applications en production servant de vrais utilisateurs
  • Vous gerez plusieurs projets avec differentes toolchains Python
  • Vous ou votre equipe ne poussez pas du code chaque jour sur chaque projet
  • Vous devez demontrer la conformite securite a des clients ou auditeurs
  • Vous etes une agence responsable de la securite des applications clients
  • Vous manipulez des donnees sensibles (donnees personnelles, financieres, medicales)

Le seuil est plus bas que ce que la plupart des gens pensent. Si meme un seul de ces criteres "besoin de monitoring" s'applique a vous, le cout de ne pas monitorer est bien superieur au cout de mise en place.

En resume

pip audit est un outil precieux. Utilisez-le. Mais ne le confondez pas avec une strategie de securite. Une strategie de securite necessite du monitoring continu, des alertes automatisees, et de la visibilite sur tous vos projets. Ce n'est pas ce qu'un outil CLI a ete concu pour fournir.

Vos dependances ne cessent pas d'etre vulnerables simplement parce que vous avez arrete de verifier.