Aller au contenu

ADR-006 : Plotly borné sous la version 7 tant que VectorBT ne suit pas

Statut : acceptée le 2026-09-01. À revoir dès que VectorBT publie un correctif.

Contexte

Mesuré le 2026-09-01 dans un environnement neuf : import vectorbt échoue avec Plotly 7.0.0. L'erreur est nette.

ValueError: Invalid property specified for object of type
plotly.graph_objs.layout.template.Data: 'scattermapbox'

VectorBT 1.1.0 enregistre un gabarit Plotly qui déclare une trace scattermapbox. Plotly a retiré les traces Mapbox en version 7, et l'accès à un nom de trace inconnu lève à l'import, pas à l'usage. La bibliothèque est donc inutilisable, pas seulement dégradée.

La borne haute a été cherchée, pas supposée. Quatre versions ont été installées successivement et import vectorbt a été relancé après chacune :

Plotly import vectorbt
5.24.1 passe
6.0.1 passe
6.3.1 passe
6.5.0 passe
7.0.0 échoue

Décision

Les extras research et figures déclarent plotly>=6.3,<7. Le verrou uv.lock fixe Plotly en 6.9.0.

La borne est écrite dans pyproject.toml avec un commentaire qui renvoie à cette fiche, pour qu'un lecteur futur sache que la contrainte a une cause et une condition de levée.

Conséquences

Les nouveautés de Plotly 7 sont indisponibles. Aucune n'est nécessaire aux figures prévues.

Le jour où VectorBT corrige son gabarit, la borne se retire en une ligne et uv lock suffit. La condition de levée est explicite : que import vectorbt passe avec Plotly 7, ce qui se vérifie en une commande.

Options écartées

Abandonner VectorBT. Rejetée pour l'instant : le prototypage vectorisé et les balayages de paramètres sont utiles à la phase de robustesse, et rien d'équivalent n'existe en source ouverte avec la même maturité.

Isoler VectorBT dans un environnement séparé. Rejetée pour le coût : deux environnements à synchroniser, deux verrous, et une frontière de plus à franchir pour un gain nul tant que Plotly 6 suffit.

Corriger le gabarit de VectorBT au chargement. Rejetée pour la fragilité : rustiner une bibliothèque tierce au moment de l'import rend le comportement dépendant de l'ordre des imports, ce qui est exactement le genre de fragilité qu'un laboratoire reproductible ne peut pas se permettre.