-
-
Notifications
You must be signed in to change notification settings - Fork 294
/
run-install.sh
171 lines (151 loc) · 5.57 KB
/
run-install.sh
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#!/bin/bash
set -e # Exit immediately if a command exits with a non-zero status
printf "\033]0;Installer\007"
clear
rm -f *.bat
# Function to log messages with timestamps
log_message() {
local msg="$1"
echo "$(date '+%Y-%m-%d %H:%M:%S') - $msg"
}
# Function to find a suitable Python version
find_python() {
for py in python3.10 python3 python; do
if command -v "$py" > /dev/null 2>&1; then
echo "$py"
return
fi
done
log_message "No compatible Python installation found. Please install Python 3.7+."
exit 1
}
# Function to install FFmpeg based on the distribution
install_ffmpeg() {
if command -v brew > /dev/null; then
log_message "Installing FFmpeg using Homebrew on macOS..."
brew install ffmpeg
elif command -v apt > /dev/null; then
log_message "Installing FFmpeg using apt..."
sudo apt update && sudo apt install -y ffmpeg
elif command -v pacman > /dev/null; then
log_message "Installing FFmpeg using pacman..."
sudo pacman -Syu --noconfirm ffmpeg
elif command -v dnf > /dev/null; then
log_message "Installing FFmpeg using dnf..."
sudo dnf install -y ffmpeg --allowerasing || install_ffmpeg_flatpak
else
log_message "Unsupported distribution for FFmpeg installation. Trying Flatpak..."
install_ffmpeg_flatpak
fi
}
# Function to install FFmpeg using Flatpak
install_ffmpeg_flatpak() {
if command -v flatpak > /dev/null; then
log_message "Installing FFmpeg using Flatpak..."
flatpak install --user -y flathub org.freedesktop.Platform.ffmpeg
else
log_message "Flatpak is not installed. Installing Flatpak..."
if command -v apt > /dev/null; then
sudo apt install -y flatpak
elif command -v pacman > /dev/null; then
sudo pacman -Syu --noconfirm flatpak
elif command -v dnf > /dev/null; then
sudo dnf install -y flatpak
elif command -v brew > /dev/null; then
brew install flatpak
else
log_message "Unable to install Flatpak automatically. Please install Flatpak and try again."
exit 1
fi
flatpak install --user -y flathub org.freedesktop.Platform.ffmpeg
fi
}
install_python_ffmpeg() {
log_message "Installing python-ffmpeg..."
python -m pip install python-ffmpeg
}
# Function to create or activate a virtual environment
prepare_install() {
if [ -d ".venv" ]; then
log_message "Virtual environment found. This implies Applio has been already installed or this is a broken install."
printf "Do you want to execute run-applio.sh? (Y/N): " >&2
read -r r
r=$(echo "$r" | tr '[:upper:]' '[:lower:]')
if [ "$r" = "y" ]; then
chmod +x run-applio.sh
./run-applio.sh && exit 0
else
log_message "Continuing with the installation."
rm -rf .venv
create_venv
fi
else
create_venv
fi
}
# Function to create the virtual environment and install dependencies
create_venv() {
log_message "Creating virtual environment..."
py=$(find_python)
"$py" -m venv .venv
log_message "Activating virtual environment..."
source .venv/bin/activate
# Install pip if necessary and upgrade
log_message "Ensuring pip is installed..."
python -m ensurepip --upgrade || {
log_message "ensurepip failed, attempting manual pip installation..."
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
}
python -m pip install --upgrade pip
install_ffmpeg
install_python_ffmpeg
log_message "Installing dependencies..."
if [ -f "requirements.txt" ]; then
python -m pip install -r requirements.txt
else
log_message "requirements.txt not found. Please ensure it exists."
exit 1
fi
log_message "Installing PyTorch..."
python -m pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --upgrade --index-url https://download.pytorch.org/whl/cu121
finish
}
# Function to finish installation
finish() {
log_message "Verifying installed packages..."
if [ -f "requirements.txt" ]; then
installed_packages=$(python -m pip freeze)
while IFS= read -r package; do
expr "${package}" : "^#.*" > /dev/null && continue
package_name=$(echo "${package}" | sed 's/[<>=!].*//')
if ! echo "${installed_packages}" | grep -q "${package_name}"; then
log_message "${package_name} not found. Attempting to install..."
python -m pip install --upgrade "${package}"
fi
done < "requirements.txt"
else
log_message "requirements.txt not found. Please ensure it exists."
exit 1
fi
clear
echo "Applio has been successfully installed. Run the file run-applio.sh to start the web interface!"
exit 0
}
# Main script execution
if [ "$(uname)" = "Darwin" ]; then
log_message "Detected macOS..."
if ! command -v brew >/dev/null 2>&1; then
log_message "Homebrew not found. Installing Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
brew install [email protected]
export PYTORCH_ENABLE_MPS_FALLBACK=1
export PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0
export PATH="/opt/homebrew/bin:$PATH"
elif [ "$(uname)" != "Linux" ]; then
log_message "Unsupported operating system. Are you using Windows?"
log_message "If yes, use the batch (.bat) file instead of this one!"
exit 1
fi
prepare_install