| import subprocess |
| import sys |
|
|
| def install_packages(): |
| print("تحديث pip...") |
| subprocess.check_call([sys.executable, "-m", "pip", "install", "--upgrade", "pip", "--user"]) |
|
|
| print("تثبيت الحزم من requirements.txt...") |
| subprocess.check_call([sys.executable, "-m", "pip", "install", "--user", "-r", "requirements.txt"]) |
|
|
| if __name__ == "__main__": |
| try: |
| install_packages() |
| print("تم تثبيت الحزم بنجاح.") |
| except subprocess.CalledProcessError as e: |
| print(f"حدث خطأ أثناء التثبيت: {e}") |
| import subprocess |
| import sys |
| from pathlib import Path |
| import platform |
| from datetime import datetime |
|
|
| try: |
| from colorama import init, Fore |
| except ImportError: |
| subprocess.check_call([sys.executable, "-m", "pip", "install", "colorama", "--user"]) |
| from colorama import init, Fore |
|
|
| init(autoreset=True) |
|
|
| LOG_FILE = "install_log.txt" |
|
|
| def log(message): |
| with open(LOG_FILE, "a", encoding="utf-8") as f: |
| f.write(f"[{datetime.now()}] {message}\n") |
|
|
| def print_and_log(message, color=Fore.WHITE): |
| print(color + message) |
| log(message) |
|
|
| def install_packages(): |
| try: |
| print_and_log("📢 نظام التشغيل: " + platform.system(), Fore.CYAN) |
|
|
| print_and_log("🔄 جاري تحديث pip...", Fore.YELLOW) |
| subprocess.check_call([sys.executable, "-m", "pip", "install", "--upgrade", "pip", "--user"]) |
|
|
| requirements_path = Path("requirements.txt") |
| if not requirements_path.exists(): |
| print_and_log("⚠️ ملف requirements.txt غير موجود!", Fore.RED) |
| return |
|
|
| print_and_log("📦 جاري تثبيت الحزم من requirements.txt...", Fore.YELLOW) |
| subprocess.check_call([sys.executable, "-m", "pip", "install", "--user", "-r", str(requirements_path)]) |
|
|
| print_and_log("✅ تم تثبيت الحزم بنجاح.", Fore.GREEN) |
|
|
| except subprocess.CalledProcessError as e: |
| print_and_log(f"❌ حدث خطأ أثناء التثبيت: {e}", Fore.RED) |
| except Exception as e: |
| print_and_log(f"⚠️ خطأ غير متوقع: {e}", Fore.RED) |
|
|
| if __name__ == "__main__": |
| install_packages() |
| import subprocess |
| import sys |
| import os |
| import socket |
| from pathlib import Path |
| from datetime import datetime |
| import platform |
|
|
| try: |
| from colorama import init, Fore, Style |
| except ImportError: |
| subprocess.call([sys.executable, "-m", "pip", "install", "colorama", "--user"]) |
| from colorama import init, Fore, Style |
|
|
| init(autoreset=True) |
|
|
| LOG_FILE = "install_log.txt" |
| VENV_DIR = Path("env") |
| REQUIREMENTS_FILE = Path("requirements.txt") |
|
|
|
|
| def log(message): |
| with open(LOG_FILE, "a", encoding="utf-8") as f: |
| f.write(f"[{datetime.now()}] {message}\n") |
|
|
|
|
| def print_and_log(message, color=Fore.WHITE): |
| print(color + message) |
| log(message) |
|
|
|
|
| def check_internet(host="8.8.8.8", port=53, timeout=3): |
| try: |
| socket.setdefaulttimeout(timeout) |
| socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect((host, port)) |
| return True |
| except Exception: |
| return False |
|
|
|
|
| def create_virtual_env(): |
| if not VENV_DIR.exists(): |
| print_and_log("📦 إنشاء بيئة افتراضية...", Fore.YELLOW) |
| subprocess.check_call([sys.executable, "-m", "venv", str(VENV_DIR)]) |
| else: |
| print_and_log("✅ البيئة الافتراضية موجودة مسبقًا.", Fore.CYAN) |
|
|
|
|
| def activate_venv_command(): |
| if platform.system() == "Windows": |
| return str(VENV_DIR / "Scripts" / "python.exe") |
| else: |
| return str(VENV_DIR / "bin" / "python") |
|
|
|
|
| def install_requirements(python_exec): |
| if not REQUIREMENTS_FILE.exists(): |
| print_and_log("❗ ملف requirements.txt غير موجود!", Fore.RED) |
| return |
| print_and_log("📥 تثبيت الحزم المطلوبة...", Fore.YELLOW) |
| subprocess.check_call([python_exec, "-m", "pip", "install", "--upgrade", "pip"]) |
| subprocess.check_call([python_exec, "-m", "pip", "install", "-r", str(REQUIREMENTS_FILE)]) |
|
|
|
|
| def run_post_install_script(): |
| script = Path("post_install.py") |
| if script.exists(): |
| print_and_log("🚀 تشغيل سكربت post_install.py...", Fore.GREEN) |
| subprocess.call([activate_venv_command(), str(script)]) |
| else: |
| print_and_log("ℹ️ لا يوجد سكربت إضافي للتشغيل.", Fore.BLUE) |
|
|
|
|
| def main(): |
| print_and_log("⚙️ تشغيل Smart Installer...", Fore.MAGENTA) |
| print_and_log(f"🖥️ نظام التشغيل: {platform.system()} {platform.release()}", Fore.CYAN) |
|
|
| if not check_internet(): |
| print_and_log("❌ لا يوجد اتصال بالإنترنت!", Fore.RED) |
| return |
|
|
| try: |
| create_virtual_env() |
| python_exec = activate_venv_command() |
| install_requirements(python_exec) |
| run_post_install_script() |
| print_and_log("✅ تم التثبيت بنجاح!", Fore.GREEN) |
| except subprocess.CalledProcessError as e: |
| print_and_log(f"💥 خطأ أثناء تنفيذ أمر: {e}", Fore.RED) |
| except Exception as ex: |
| print_and_log(f"🚨 استثناء غير متوقع: {ex}", Fore.RED) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|