Installation documentée par plateforme ; commande rtg verifier

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mf2kATMtqVABHSYdxJMnim
This commit is contained in:
FabriceandClaude Opus 5.5 committed 2026-10-09 11:53:47 +00:00
1 parent b9cb4b8b47
commit d40e963019
3 files changed
+173 -20

No files matched your search

+7
View File
@@ -6,6 +6,7 @@
rtg compresser VOYAGE seulement les vidéos
rtg accueil seulement la page d'accueil et la carte globale
rtg migrer écrire site.toml et les voyage.toml depuis l'existant
rtg verifier tout ce dont RTG a besoin est-il installé ?
La racine du site est le premier dossier, en remontant depuis le dossier
courant, qui contient site.toml (sinon le dossier courant) ; --racine la force.
@@ -42,9 +43,15 @@ def main(argv=None):
ac.add_argument("--mymaps-maj", action="store_true")
sp.add_parser("migrer", help="écrire site.toml et voyage.toml depuis l'organisation actuelle")
sp.add_parser("verifier", help="contrôler que Python, exiftool et ffmpeg sont bien installés")
args = p.parse_args(argv)
if args.commande == "verifier":
# Avant tout autre import : doit fonctionner même si un module manque.
from rtg.verifier import verifier
sys.exit(0 if verifier() else 1)
from rtg import accueil, site, sources, video
from rtg.config import reglages_site, reglages_voyage, trouver_racine
racine = os.path.abspath(args.racine) if args.racine else trouver_racine(".")
+100
View File
@@ -0,0 +1,100 @@
"""`rtg verifier` : tout ce dont RTG a besoin est-il installé ?
Pour chaque élément manquant, la commande à taper sur ce système.
"""
import importlib
import platform
import subprocess
import sys
from rtg.outils import dire, programme
SYSTEME = {"Darwin": "mac", "Windows": "windows"}.get(platform.system(), "linux")
# Commande d'installation par système, pour chaque programme externe.
INSTALLER = {
"exiftool": {"mac": "brew install exiftool", "linux": "sudo apt install libimage-exiftool-perl",
"windows": "winget install OliverBetz.ExifTool"},
"ffmpeg": {"mac": "brew install ffmpeg", "linux": "sudo apt install ffmpeg",
"windows": "winget install Gyan.FFmpeg"},
}
# Modules Python : (nom à importer, nom du paquet, indispensable ?)
MODULES = [
("folium", "folium", True), ("gpxpy", "gpxpy", True), ("jinja2", "jinja2", True),
("markdown2", "markdown2", True), ("numpy", "numpy", True), ("pandas", "pandas", True),
("PIL", "pillow", True), ("pillow_heif", "pillow-heif", False),
]
def _version(cmd):
try:
r = subprocess.run(cmd, capture_output=True, text=True, timeout=20)
return (r.stdout or r.stderr).strip().splitlines()[0]
except Exception:
return ""
def verifier():
"""Affiche le bilan ; renvoie True si l'essentiel est là."""
ok = True
dire(f"Système : {platform.system()} {platform.release()} ({platform.machine()})")
v = sys.version_info
if v >= (3, 10):
dire(f"✅ Python {v.major}.{v.minor}.{v.micro}")
else:
ok = False
dire(f"❌ Python {v.major}.{v.minor} : il faut Python 3.10 ou plus récent")
manquants = []
for module, paquet, indispensable in MODULES:
try:
importlib.import_module(module)
except ImportError:
if indispensable:
ok = False
manquants.append(paquet)
dire(f"❌ Module Python {paquet} absent")
else:
dire(f"⚠️ Module Python {paquet} absent : les photos HEIC de l'iPhone seront ignorées")
if manquants:
dire(f" → réinstaller RTG avec pipx (il installe les modules), ou : "
f"python3 -m pip install {' '.join(manquants)}")
if not manquants:
dire("✅ Modules Python")
if sys.version_info < (3, 11):
try:
importlib.import_module("tomli")
except ImportError:
ok = False
dire("❌ Module Python tomli absent (nécessaire avant Python 3.11)")
if programme("exiftool"):
dire(f"✅ exiftool {_version(['exiftool', '-ver'])}")
else:
ok = False
dire(f"❌ exiftool absent (positions GPS des photos et vidéos) → {INSTALLER['exiftool'][SYSTEME]}")
if programme("ffmpeg") and programme("ffprobe"):
dire(f"✅ {_version(['ffmpeg', '-version'])[:60]}")
enc = subprocess.run(["ffmpeg", "-hide_banner", "-encoders"], capture_output=True, text=True).stdout
for nom, role in (("libx265", "1080p HEVC"), ("libx264", "720p H.264")):
if nom in enc:
dire(f" ✅ {nom} ({role})")
else:
ok = False
dire(f" ❌ {nom} absent de ce ffmpeg ({role}) → installer un ffmpeg complet : "
f"{INSTALLER['ffmpeg'][SYSTEME]}")
if SYSTEME == "mac":
if "hevc_videotoolbox" in enc:
dire(" ✅ VideoToolbox (encodeur « matériel », facultatif)")
else:
dire(" ⚠️ VideoToolbox absent : seul l'encodeur « processeur » sera disponible")
else:
ok = False
dire(f"❌ ffmpeg absent (vidéos et aperçus) → {INSTALLER['ffmpeg'][SYSTEME]}")
dire()
dire("✅ Tout est prêt." if ok else "❌ Il manque des éléments : voir les lignes ❌ ci-dessus.")
return ok