File size: 1,451 Bytes
aa8b25c
 
e67d561
 
aa8b25c
 
e67d561
aa8b25c
 
 
 
 
 
 
 
 
 
 
b5712a3
aa8b25c
 
 
 
e67d561
aa8b25c
 
 
 
 
 
 
 
 
 
 
 
 
 
e67d561
aa8b25c
 
e67d561
aa8b25c
e67d561
36ea38b
b5712a3
180f9fe
b5712a3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from src.ui import create_ui

import os
import subprocess
import urllib.request
import tarfile

def install_minizinc():
    install_path = "/home/user/minizinc"
    if os.path.exists(os.path.join(install_path, "bin", "minizinc")):
        print("βœ… MiniZinc already installed.")
        return

    print("⬇️ Downloading MiniZinc...")
    url = "https://github.com/MiniZinc/MiniZincIDE/releases/download/2.9.0/MiniZincIDE-2.9.0-bundle-linux-x86_64.tgz"
    bundle_path = "/tmp/minizinc.tgz"

    urllib.request.urlretrieve(url, bundle_path)

    print("πŸ“¦ Extracting MiniZinc...")
    os.makedirs(install_path, exist_ok=True)
    with tarfile.open(bundle_path, "r:gz") as tar:
        tar.extractall(path=install_path, members=_strip_top_level(tar))

    print("βœ… MiniZinc installed.")

def _strip_top_level(tar):
    # Removes top-level folder when extracting
    top_level = tar.getmembers()[0].name.split('/')[0]
    for member in tar.getmembers():
        member.path = '/'.join(member.path.split('/')[1:])
        yield member

# Install and patch env
install_minizinc()
os.environ["PATH"] = f"/home/user/minizinc/bin:{os.environ['PATH']}"

# Check it works
try:
    version = subprocess.check_output(["minizinc", "--version"], text=True)
    print("🧠 MiniZinc version:", version.strip())
except Exception as e:
    print("❌ MiniZinc install failed:", e)


if __name__ == "__main__":
    demo = create_ui()
    demo.queue().launch()