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:
1 parent
b9cb4b8b47
commit
d40e963019
3 files changed
+173
-20
No files matched your search
@@ -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
@@ -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
|
||||
Reference in new issue
Block a user