Test3 / setup.py
Eueuiaa's picture
Update setup.py
edb8974 verified
raw
history blame
5.39 kB
# setup.py
import os
import subprocess
import sys
from pathlib import Path
import yaml
# Adiciona a importação do hf_hub_download
from huggingface_hub import hf_hub_download
# --- Configuração ---
DEPS_DIR = Path("/data")
MODELS_ROOT = DEPS_DIR / "ltx_models" # Diretório centralizado para modelos
# URLs explícitas para os repositórios
REPOS_TO_CLONE = {
"LTX-Video": "https://huggingface.co/spaces/Lightricks/ltx-video-distilled",
"SeedVR_Space": "https://huggingface.co/spaces/ByteDance-Seed/SeedVR2-3B",
"MMAudio": "https://github.com/hkchengrex/MMAudio.git"
}
def run_command(command, cwd=None, is_pip=False):
"""Executa um comando no terminal e exibe a saída em tempo real."""
if is_pip:
command = [sys.executable, "-m", "pip"] + command
print(f"Executando: {' '.join(command)}")
try:
with subprocess.Popen(
command, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
text=True, encoding='utf-8', bufsize=1
) as process:
for line in iter(process.stdout.readline, ''):
print(line, end='')
return_code = process.wait()
if return_code != 0:
raise subprocess.CalledProcessError(return_code, command)
except subprocess.CalledProcessError as e:
print(f"ERRO: O comando falhou com o código de saída {e.returncode}")
sys.exit(1)
except FileNotFoundError:
print(f"ERRO: O comando '{command[0]}' não foi encontrado.")
sys.exit(1)
def clone_repos():
"""ETAPA 1: Garante que todos os repositórios de código necessários existam."""
print("--- ETAPA 1: Verificando e clonando repositórios de código ---")
for repo_name, repo_url in REPOS_TO_CLONE.items():
repo_path = DEPS_DIR / repo_name
if repo_path.exists() and (repo_path / ".git").exists():
print(f"Repositório '{repo_name}' já existe. Pulando.")
else:
print(f"Clonando '{repo_name}' de {repo_url}...")
run_command(["git", "clone", "--depth", "1", "-q", repo_url, str(repo_path)])
print(f"'{repo_name}' clonado com sucesso.")
def install_ltx_dependencies():
"""ETAPA 2: Instala as dependências Python do LTX-Video."""
print("\n--- ETAPA 2: Instalando dependências Python do LTX-Video ---")
ltx_repo_path = DEPS_DIR / "LTX-Video"
if ltx_repo_path.exists():
run_command(["install", "-e", ".[inference]"], cwd=str(ltx_repo_path), is_pip=True)
print("Dependências do LTX-Video instaladas com sucesso.")
else:
print("ERRO CRÍTICO: Diretório LTX-Video não encontrado. Não foi possível instalar dependências.")
sys.exit(1)
def download_ltx_models():
"""
ETAPA 3: Verifica e baixa os modelos LTX necessários, lendo os configs
do repositório já clonado.
"""
print("\n--- ETAPA 3: Verificando e baixando modelos LTX ---")
LTX_REPO_ID = "Lightricks/LTX-Video" # Repositório dos modelos no Hub
ltx_configs_dir = DEPS_DIR / "LTX-Video" / "configs"
if not ltx_configs_dir.is_dir():
print(f"ERRO CRÍTICO: Diretório de configs '{ltx_configs_dir}' não encontrado. O clone do LTX-Video pode ter falhado.")
sys.exit(1)
required_model_files = set()
for cfg_path in ltx_configs_dir.glob("*.yaml"):
try:
with open(cfg_path, 'r') as f:
config = yaml.safe_load(f)
if config and config.get("checkpoint_path"):
required_model_files.add(config["checkpoint_path"])
if config and config.get("spatial_upscaler_model_path"):
required_model_files.add(config["spatial_upscaler_model_path"])
except Exception as e:
print(f"AVISO: Falha ao ler o arquivo de configuração {cfg_path}: {e}")
if not required_model_files:
print("AVISO: Nenhum arquivo de modelo foi encontrado nos arquivos de configuração. Verifique os configs.")
return
print(f"Modelos necessários encontrados: {required_model_files}")
MODELS_ROOT.mkdir(exist_ok=True)
for model_filename in required_model_files:
local_path = MODELS_ROOT / model_filename
if local_path.exists():
print(f"Modelo '{model_filename}' já existe localmente. Pulando.")
else:
print(f"Baixando modelo '{model_filename}'...")
try:
hf_hub_download(
repo_id=LTX_REPO_ID,
filename=model_filename,
local_dir=str(MODELS_ROOT),
local_dir_use_symlinks=False,
token=os.getenv("HF_TOKEN")
)
print(f"'{model_filename}' baixado com sucesso.")
except Exception as e:
print(f"ERRO: Falha ao baixar '{model_filename}'. Verifique o nome do arquivo e a conexão. Erro: {e}")
def main():
print("--- Iniciando Setup Completo do Ambiente ADUC-SDR ---")
DEPS_DIR.mkdir(exist_ok=True)
# Executa as etapas na ordem correta
clone_repos()
install_ltx_dependencies()
download_ltx_models()
print("\n--- ✅ Setup do Ambiente Concluído com Sucesso! ---")
print("Todos os repositórios, dependências e modelos estão prontos.")
if __name__ == "__main__":
main()