erplibre/.claude/skills/erplibre-deployment/SKILL.md
Mathieu Benoit 42e10bcced [UPD] install : le venv d'outillage passe en Python 3.14.7
install_erplibre.sh bâtissait .venv.erplibre avec le python3 du système, quelle
que soit sa version : un 3.10 y donnait un venv que l'outillage ne sait pas
charger. Il délègue à install_venv.sh, qui obtient la version par mise, pyenv
ou la distribution, et rebâtit un venv hors service. Le PATCH ne borne que le
venv d'Odoo, dont le pyproject exige « >=3.12.10,<3.13 » : l'exiger ailleurs
écartait un Python de distribution d'un cran en retard — NixOS 25.11 livre
3.14.2 — et faisait compiler CPython pour rien. Le module NixOS déclare
désormais les DEUX Python, substitués depuis les fichiers de version.
Vérifié : 15 tests sur des venvs factices, conservés, rebâtis ou refusés selon
leur état, et un chemin sans pyvenv.cfg garde son contenu.

--- EN ---

install_erplibre.sh built .venv.erplibre with the system python3, whatever its
version: a 3.10 gave a venv the tooling cannot load. It delegates to
install_venv.sh, which obtains the version through mise, pyenv or the
distribution, and rebuilds a venv out of service. The PATCH bounds only Odoo's
venv, whose pyproject requires ">=3.12.10,<3.13": requiring it elsewhere turned
away a distribution Python one step behind — NixOS 25.11 ships 3.14.2 — and
compiled CPython for nothing. The NixOS module now declares BOTH Pythons,
substituted from the version files.
Checked: 15 tests on stub venvs, kept, rebuilt or refused by their state, and a
path without pyvenv.cfg keeps its content.

Assisted-by: Claude Opus 5
2026-09-24 13:56:57 -04:00

3.6 KiB

name description
erplibre-deployment Déploiement ERPLibre : Docker, systemd, nginx, SSL, DNS, plateformes supportées, et le choix de l'interpréteur Python (EL_PYTHON_PROVIDER) comme du gestionnaire de paquets (EL_PIP_PROVIDER). À charger pour déployer, installer ou changer de fournisseur Python.
  • Docker : docker-compose.yml (PostgreSQL 18 + PostGIS 3.6)
  • Systemd : script/systemd/ pour les services
  • Nginx : script/nginx/ pour le reverse proxy
  • SSL : Certbot pour les certificats
  • DNS : script/deployment/update_dns_cloudflare.py
  • VPN : script/vpn/ — cinq pilotes (L2TP/IPsec PSK, WireGuard, OpenVPN, OpenConnect, sshuttle), profils en JSON et secrets dans un coffre KeePassXC. Mode d'emploi : script/vpn/README.md.

Plateformes supportées : Ubuntu 24.04 / 25.10 / 26.04, Linux Mint 22.3, Debian 12, AlmaLinux 9+, Rocky Linux 9+, openSUSE Leap 16 et Tumbleweed, Arch Linux, macOS (mise ou pyenv), Windows (WSL/Docker).

Ubuntu 20.04 et 22.04 sont abandonnées : pikepdf exige qpdf >= 12.2, compilé en C++20, quand focal livre GCC 9.

Interpréteur Python

EL_PYTHON_PROVIDER (dans env_var.sh) vaut auto, mise ou pyenv. auto reprend un interpréteur DÉJÀ posé, quel que soit le fournisseur ; sinon il préfère mise, qui pose un CPython précompilé, et retombe sur pyenv, qui le compile.

Un seul fichier décide : script/install/lib_python_provider.sh. mise n'est jamais installé automatiquement — make install_mise porte cette décision. Pas de binaire mise pour s390x à ce jour : cette architecture reste sur pyenv.

Le Python de l'outillage

conf/python-erplibre-version (3.14.7) donne l'interpréteur de .venv.erplibre, le venv d'outillage, distinct du venv Odoo (3.12.10 pour Odoo 18.0). C'est la seule version que script/ vise : là où une distribution ne la porte pas, pyenv la compile.

Le PATCH ne borne que le venv d'Odoo, dont le pyproject exige >=3.12.10,<3.13. Pour l'outillage, la majeure.mineure suffit : exiger le patch écarterait le Python d'une distribution d'un cran en retard — NixOS 25.11 livre 3.14.2 — et ferait compiler CPython pour rien.

install_erplibre.sh passe par install_venv.sh, donc par EL_PYTHON_PROVIDER. Un venv dont bin/python n'est pas compatible (même majeure.mineure, patch au moins égal) est DÉTRUIT puis rebâti : ce qui y avait été posé à la main part avec lui. Le venv d'Odoo, lui, n'est rebâti que s'il est HORS SERVICE : une simple différence de version le laisse en place, parce que le rebâtir refait une installation Poetry entière. Un répertoire sans pyvenv.cfg n'est jamais effacé.

Le hook pre-commit relaie script/analyse/check_python_version.py : il signale le source qui ne parse pas sous cette version, sans bloquer, et dit quand aucun interpréteur de cette version n'était là pour vérifier. L'image Docker de production bâtit .venv.erplibre sur le Python d'Odoo de son image de base, et s'arrête si ce Python ne sait pas lire script/.

Paquets Python

EL_PIP_PROVIDER (dans env_var.sh) vaut auto, uv ou pip. auto prend uv s'il est présent et si le venv visé est en Python ≥ 3.8, sinon pip ; un échec d'uv retombe sur pip. Un seul fichier décide : script/install/lib_pip_provider.sh. uv n'est jamais installé automatiquement — make install_uv porte cette décision.

Portée réelle : le venv d'outils et l'amorçage de Poetry. poetry install n'est pas concerné — uv ne lit pas poetry.lock — et c'est pourtant l'étape qui domine. Sur s390x le gain est quasi nul : une trentaine de paquets sans roue se compilent, et uv n'enlève pas une seconde de gcc.