setup.py

import os
import sys
import subprocess
import platform
import time

from setuptools import setup, find_packages
from setuptools.command.install import install

# Gereken ek paketler ve kütüphaneler (pip ile)
REQUIRED_PACKAGES = [
   'numpy',
   'scipy',
   'pydub',  # ses işlemleri için
   'requests',  # HTTP istekleri için
   'flask',  # web sunucusu için
   'tqdm',  # geri bildirim progress bar
   'selenium',  # web scraping için
   'pytesseract',  # OCR için
]

# Gereken bağımlılıklar (ffmpeg, ChromeDriver vb.)
EXTRA_DEPENDENCIES = {
   'ffmpeg': {
       'Linux': 'sudo apt-get install ffmpeg',
       'Windows': 'https://www.gyan.dev/ffmpeg/builds/',
       'MacOS': 'brew install ffmpeg'
   },
   'chromedriver': {
       'Linux': 'sudo apt-get install chromium-chromedriver',
       'Windows': 'https://sites.google.com/a/chromium.org/chromedriver/downloads',
       'MacOS': 'brew install chromedriver'
   }
}

# Sistem tipi ve platform bilgilerini alıyoruz
system = platform.system()

# Bağımlılıkları kontrol eden fonksiyon
def check_and_install_dependency(dep_name, dep_install_command):
   try:
       print(f"{dep_name} kontrol ediliyor...")
       # Komutu çalıştırarak bağımlılığı yüklemeyi deniyoruz
       result = subprocess.run(dep_install_command, shell=True)
       if result.returncode == 0:
           print(f"{dep_name} başarıyla kuruldu!")
       else:
           print(f"{dep_name} kurulamadı!")
   except Exception as e:
       print(f"Hata: {dep_name} kurulurken bir sorun oluştu: {str(e)}")

# Gereken bağımlılıkları yükleyen fonksiyon
def install_dependencies():
   print(f"Sistem: {system}")
   for dep_name, dep_cmds in EXTRA_DEPENDENCIES.items():
       install_cmd = dep_cmds.get(system)
       if install_cmd:
           print(f"{dep_name} yükleniyor...")
           check_and_install_dependency(dep_name, install_cmd)
       else:
           print(f"{dep_name} için uygun kurulum komutu bulunamadı!")

# pip ile kütüphaneleri yükleyen fonksiyon
def install_packages():
   for package in REQUIRED_PACKAGES:
       try:
           print(f"{package} yükleniyor...")
           subprocess.check_call([sys.executable, "-m", "pip", "install", package])
           print(f"{package} başarıyla yüklendi.")
       except subprocess.CalledProcessError:
           print(f"{package} yüklenemedi, alternatif yöntemler deneniyor.")
           # Alternatif yöntemler eklenebilir
           try:
               print(f"{package} için alternatif kurulum yöntemi deneniyor...")
               subprocess.check_call([sys.executable, "-m", "easy_install", package])
               print(f"{package} alternatif yöntemle yüklendi.")
           except subprocess.CalledProcessError as e:
               print(f"{package} kurulamıyor: {e}")

# Kurulum işlemleri sırasında bu sınıf çalışacak
class CustomInstallCommand(install):
   def run(self):
       print("Gerekli bağımlılıklar ve kütüphaneler yükleniyor...")
       install_dependencies()
       install_packages()
       print("\nTüm bağımlılıklar ve kütüphaneler başarıyla kuruldu!")
       print("Sistem kullanıma hazır.")
       install.run(self)

# setup.py ayarları
setup(
   name='BeatscriptAutomation',
   version='1.0',
   description='Kapsamlı bir müzik prodüksiyon ve otomasyon sistemi',
   packages=find_packages(),
   install_requires=REQUIRED_PACKAGES,
   cmdclass={
       'install': CustomInstallCommand,
   },
   entry_points={
       'console_scripts': [
           'beatscript = beatscript.cli:main',
       ],
   },
)

# Başlatma mesajı
print("Kurulum tamamlandı! Tüm gereksinimler başarıyla kuruldu.")