venv_create/venv_create.py

74 lines
2.0 KiB
Python

import os
import subprocess
import sys
import urllib.request
import zipfile
import shutil
# Katalog nadrzędny względem projektu
BASE_DIR = os.path.abspath(os.path.join(os.getcwd(), os.pardir))
VENV_DIR = os.path.join(BASE_DIR, "venv")
REQUIREMENTS_SRC = os.path.join(os.getcwd(), "requirements.txt")
REQUIREMENTS_DEST = os.path.join(VENV_DIR, "requirements.txt")
MODEL_URL = "https://alphacephei.com/vosk/models/vosk-model-small-pl-0.22.zip"
MODEL_ZIP = os.path.join(VENV_DIR, "vosk-model-small-pl-0.22.zip")
MODEL_DIR = os.path.join(VENV_DIR, "vosk-model-small-pl-0.22")
VOSKPL_SRC = os.path.join(os.getcwd(), "voskpl.py")
VOSKPL_DEST = os.path.join(VENV_DIR, "voskpl.py")
def copy_voskpl():
print("[+] Kopiowanie voskpl.py do venv...")
shutil.copy(VOSKPL_SRC, VOSKPL_DEST)
def create_virtualenv():
print(f"[+] Tworzenie środowiska wirtualnego w: {VENV_DIR}")
subprocess.check_call([sys.executable, "-m", "venv", VENV_DIR])
def copy_requirements():
print("[+] Kopiowanie requirements.txt do venv...")
shutil.copy(REQUIREMENTS_SRC, REQUIREMENTS_DEST)
def install_requirements():
print("[+] Instalacja pakietów z requirements.txt...")
pip_path = (
os.path.join(VENV_DIR, "bin", "pip")
if os.name != "nt"
else os.path.join(VENV_DIR, "Scripts", "pip.exe")
)
subprocess.check_call([pip_path, "install", "-r", REQUIREMENTS_DEST])
def download_model():
if os.path.exists(MODEL_DIR):
print("[i] Model już istnieje w venv, pomijam pobieranie.")
return
print(f"[+] Pobieranie modelu do: {MODEL_ZIP}")
urllib.request.urlretrieve(MODEL_URL, MODEL_ZIP)
print("[+] Rozpakowywanie modelu...")
with zipfile.ZipFile(MODEL_ZIP, "r") as zip_ref:
zip_ref.extractall(VENV_DIR)
print("[+] Usuwanie archiwum ZIP...")
os.remove(MODEL_ZIP)
def main():
create_virtualenv()
copy_requirements()
install_requirements()
download_model()
copy_voskpl()
print("[✓] Gotowe!")
if __name__ == "__main__":
main()