venv + install requirement auto
This commit is contained in:
133
main.py
Normal file
133
main.py
Normal file
@@ -0,0 +1,133 @@
|
||||
import subprocess
|
||||
import os
|
||||
import sys
|
||||
import venv
|
||||
import tkinter as tk
|
||||
from tkinter import ttk
|
||||
from gui_firewall import open_firewall_gui
|
||||
from gui_switch import open_switch_gui
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
VENV_DIR = os.path.join(BASE_DIR, "venv")
|
||||
REQ_FILE = os.path.join(BASE_DIR, "requirements.txt")
|
||||
|
||||
def venv_python():
|
||||
if sys.platform == "win32":
|
||||
return os.path.join(VENV_DIR, "Scripts", "python.exe")
|
||||
return os.path.join(VENV_DIR, "bin", "python")
|
||||
|
||||
def in_venv():
|
||||
return sys.prefix != sys.base_prefix
|
||||
|
||||
def create_venv():
|
||||
print("[INFO] Création de l'environnement virtuel…")
|
||||
venv.EnvBuilder(with_pip=True).create(VENV_DIR)
|
||||
|
||||
def install_requirements():
|
||||
print("[INFO] Vérification / installation des dépendances…")
|
||||
subprocess.check_call([
|
||||
venv_python(),
|
||||
"-m",
|
||||
"pip",
|
||||
"install",
|
||||
"--upgrade",
|
||||
"pip",
|
||||
"setuptools",
|
||||
"wheel"
|
||||
])
|
||||
|
||||
subprocess.check_call([
|
||||
venv_python(),
|
||||
"-m",
|
||||
"pip",
|
||||
"install",
|
||||
"-r",
|
||||
REQ_FILE
|
||||
])
|
||||
|
||||
def bootstrap_venv():
|
||||
if not os.path.isdir(VENV_DIR):
|
||||
print("[INFO] Aucun venv détecté")
|
||||
create_venv()
|
||||
install_requirements()
|
||||
return
|
||||
|
||||
print("[INFO] Environnement virtuel détecté")
|
||||
install_requirements()
|
||||
|
||||
|
||||
def relaunch_in_venv():
|
||||
print("[INFO] Relance du script dans le venv…")
|
||||
subprocess.check_call([
|
||||
venv_python(),
|
||||
__file__
|
||||
])
|
||||
sys.exit(0)
|
||||
|
||||
# Contenu fenêtre principale
|
||||
def open_main_gui():
|
||||
root = tk.Tk()
|
||||
root.title("Analyse Réseau")
|
||||
root.geometry("650x350")
|
||||
root.resizable(False, False)
|
||||
|
||||
ttk.Label(
|
||||
root,
|
||||
text="Analyse Réseau",
|
||||
font=("Arial", 16, "bold")
|
||||
).pack(pady=20)
|
||||
|
||||
ttk.Label(
|
||||
root,
|
||||
text="Sélectionnez le type d'analyse à effectuer :",
|
||||
font=("Arial", 11)
|
||||
).pack(pady=10)
|
||||
|
||||
ttk.Button(
|
||||
root,
|
||||
text="Analyse configuration Firewall",
|
||||
width=30,
|
||||
command=lambda: open_firewall_gui(root, BASE_DIR)
|
||||
).pack(pady=5)
|
||||
|
||||
ttk.Label(
|
||||
root,
|
||||
text="(Convertir les données au format normalisé Yang dans un fichier JSON)" \
|
||||
"\n + possibilité de générer une matrice de flux en Excel" \
|
||||
"\n + possibilité de générer une matrice de routage en Excel (route statique uniquement)",
|
||||
font=("Arial", 9, "italic"),
|
||||
anchor="center",
|
||||
justify="center"
|
||||
).pack(pady=5)
|
||||
|
||||
ttk.Separator(root, orient="horizontal").pack(fill="x", pady=10)
|
||||
|
||||
ttk.Button(
|
||||
root,
|
||||
text="Analyse log Switch",
|
||||
width=30,
|
||||
command=lambda: open_switch_gui(root, BASE_DIR)
|
||||
).pack(pady=5)
|
||||
|
||||
ttk.Label(
|
||||
root,
|
||||
text="(Convertir les données au format normalisé Yang dans un fichier JSON)" \
|
||||
"\n + possibilité de générer un schéma réseau",
|
||||
font=("Arial", 9, "italic"),
|
||||
anchor="center",
|
||||
justify="center"
|
||||
).pack(pady=5)
|
||||
|
||||
root.mainloop()
|
||||
|
||||
def main():
|
||||
if not in_venv():
|
||||
bootstrap_venv()
|
||||
relaunch_in_venv()
|
||||
|
||||
print("[INFO] Environnement prêt")
|
||||
|
||||
open_main_gui()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user