Add debian installer and launcher
All checks were successful
Python CI / test (push) Successful in 1m30s
Lint / lint (push) Successful in 1m8s
Tests / test (3.11) (push) Successful in 1m41s
Tests / test (3.12) (push) Successful in 1m42s
Tests / test (3.13) (push) Successful in 1m36s
Tests / test (3.14) (push) Successful in 1m17s
All checks were successful
Python CI / test (push) Successful in 1m30s
Lint / lint (push) Successful in 1m8s
Tests / test (3.11) (push) Successful in 1m41s
Tests / test (3.12) (push) Successful in 1m42s
Tests / test (3.13) (push) Successful in 1m36s
Tests / test (3.14) (push) Successful in 1m17s
This commit is contained in:
parent
a7f32e73b9
commit
c66724c190
35
.dockerignore
Normal file
35
.dockerignore
Normal file
@ -0,0 +1,35 @@
|
||||
# Virtual environments
|
||||
venv/
|
||||
.venv/
|
||||
pyPhotoAlbum/venv/
|
||||
|
||||
# Python cache
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
*.so
|
||||
.Python
|
||||
build/
|
||||
dist/
|
||||
eggs/
|
||||
*.egg-info/
|
||||
*.egg
|
||||
|
||||
# IDE
|
||||
.idea/
|
||||
.vscode/
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# Git
|
||||
.git/
|
||||
|
||||
# Test/coverage
|
||||
.coverage
|
||||
htmlcov/
|
||||
.pytest_cache/
|
||||
.tox/
|
||||
|
||||
# OS files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
265
install-debian.sh
Executable file
265
install-debian.sh
Executable file
@ -0,0 +1,265 @@
|
||||
#!/bin/bash
|
||||
# Debian/Ubuntu installation script for pyPhotoAlbum
|
||||
# Creates a virtual environment and installs all dependencies
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
print_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
print_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
print_step() {
|
||||
echo -e "${BLUE}[STEP]${NC} $1"
|
||||
}
|
||||
|
||||
# Get the directory where this script is located
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
VENV_DIR="$SCRIPT_DIR/venv"
|
||||
INSTALL_DIR="$HOME/.local"
|
||||
BIN_DIR="$INSTALL_DIR/bin"
|
||||
|
||||
echo "========================================"
|
||||
echo " pyPhotoAlbum Debian Installation "
|
||||
echo "========================================"
|
||||
echo ""
|
||||
|
||||
# Check if running on Debian/Ubuntu
|
||||
if [ -f /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
if [[ "$ID" != "debian" && "$ID" != "ubuntu" && "$ID_LIKE" != *"debian"* && "$ID_LIKE" != *"ubuntu"* ]]; then
|
||||
print_warn "This script is designed for Debian/Ubuntu-based systems."
|
||||
print_warn "Detected: $PRETTY_NAME"
|
||||
read -p "Continue anyway? [y/N]: " continue_choice
|
||||
if [[ ! "$continue_choice" =~ ^[Yy]$ ]]; then
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
print_info "Detected: $PRETTY_NAME"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check for required files
|
||||
if [ ! -f "$SCRIPT_DIR/pyproject.toml" ]; then
|
||||
print_error "pyproject.toml not found. Please run this script from the project root."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Step 1: Install system dependencies
|
||||
print_step "Installing system dependencies..."
|
||||
echo ""
|
||||
|
||||
# Check if we need sudo
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
SUDO="sudo"
|
||||
else
|
||||
SUDO=""
|
||||
fi
|
||||
|
||||
$SUDO apt update
|
||||
|
||||
# Install Python and venv support
|
||||
print_info "Installing Python and venv support..."
|
||||
$SUDO apt install -y python3 python3-venv python3-pip
|
||||
|
||||
# Install system libraries required for PyQt6 and OpenGL
|
||||
print_info "Installing Qt6 and OpenGL libraries..."
|
||||
$SUDO apt install -y \
|
||||
libgl1-mesa-dev \
|
||||
libglu1-mesa-dev \
|
||||
libxcb-xinerama0 \
|
||||
libxcb-cursor0 \
|
||||
libxkbcommon0 \
|
||||
libdbus-1-3 \
|
||||
libegl1 \
|
||||
libfontconfig1 \
|
||||
libfreetype6 \
|
||||
libx11-6 \
|
||||
libx11-xcb1 \
|
||||
libxcb1 \
|
||||
libxcb-glx0 \
|
||||
libxcb-icccm4 \
|
||||
libxcb-image0 \
|
||||
libxcb-keysyms1 \
|
||||
libxcb-randr0 \
|
||||
libxcb-render0 \
|
||||
libxcb-render-util0 \
|
||||
libxcb-shape0 \
|
||||
libxcb-shm0 \
|
||||
libxcb-sync1 \
|
||||
libxcb-xfixes0 \
|
||||
libxcb-xkb1 \
|
||||
libxkbcommon-x11-0 \
|
||||
libglib2.0-0 \
|
||||
libgtk-3-0 || print_warn "Some packages may not be available, continuing..."
|
||||
|
||||
echo ""
|
||||
|
||||
# Step 2: Create virtual environment
|
||||
print_step "Creating virtual environment..."
|
||||
echo ""
|
||||
|
||||
if [ -d "$VENV_DIR" ]; then
|
||||
print_warn "Virtual environment already exists at $VENV_DIR"
|
||||
read -p "Remove and recreate? [y/N]: " recreate_choice
|
||||
if [[ "$recreate_choice" =~ ^[Yy]$ ]]; then
|
||||
print_info "Removing existing virtual environment..."
|
||||
rm -rf "$VENV_DIR"
|
||||
else
|
||||
print_info "Using existing virtual environment..."
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -d "$VENV_DIR" ]; then
|
||||
print_info "Creating virtual environment at $VENV_DIR..."
|
||||
python3 -m venv "$VENV_DIR"
|
||||
fi
|
||||
|
||||
# Activate virtual environment
|
||||
source "$VENV_DIR/bin/activate"
|
||||
|
||||
# Upgrade pip
|
||||
print_info "Upgrading pip..."
|
||||
pip install --upgrade pip
|
||||
|
||||
echo ""
|
||||
|
||||
# Step 3: Install Python dependencies
|
||||
print_step "Installing Python dependencies..."
|
||||
echo ""
|
||||
|
||||
print_info "Installing pyPhotoAlbum and its dependencies..."
|
||||
pip install -e "$SCRIPT_DIR"
|
||||
|
||||
echo ""
|
||||
|
||||
# Step 4: Create launcher script
|
||||
print_step "Creating launcher script..."
|
||||
echo ""
|
||||
|
||||
mkdir -p "$BIN_DIR"
|
||||
|
||||
cat > "$BIN_DIR/pyphotoalbum" << EOF
|
||||
#!/bin/bash
|
||||
# pyPhotoAlbum launcher script
|
||||
# Activates the virtual environment and runs the application
|
||||
|
||||
SCRIPT_DIR="$SCRIPT_DIR"
|
||||
VENV_DIR="$VENV_DIR"
|
||||
|
||||
# Activate venv and run
|
||||
source "\$VENV_DIR/bin/activate"
|
||||
exec python "\$SCRIPT_DIR/pyPhotoAlbum/main.py" "\$@"
|
||||
EOF
|
||||
|
||||
chmod +x "$BIN_DIR/pyphotoalbum"
|
||||
print_info "Launcher script created at $BIN_DIR/pyphotoalbum"
|
||||
|
||||
echo ""
|
||||
|
||||
# Step 5: Install desktop integration
|
||||
print_step "Installing desktop integration..."
|
||||
echo ""
|
||||
|
||||
DESKTOP_DIR="$HOME/.local/share/applications"
|
||||
ICON_DIR="$HOME/.local/share/icons/hicolor"
|
||||
|
||||
mkdir -p "$DESKTOP_DIR"
|
||||
mkdir -p "$ICON_DIR/256x256/apps"
|
||||
|
||||
# Create desktop file with correct path
|
||||
cat > "$DESKTOP_DIR/pyphotoalbum.desktop" << EOF
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=pyPhotoAlbum
|
||||
GenericName=Photo Album Designer
|
||||
Comment=Design photo albums and export them to PDF
|
||||
Exec=$BIN_DIR/pyphotoalbum %F
|
||||
Icon=pyphotoalbum
|
||||
Terminal=false
|
||||
Categories=Graphics;Photography;Qt;
|
||||
Keywords=photo;album;pdf;design;layout;
|
||||
MimeType=application/x-pyphotoalbum-project;
|
||||
StartupNotify=true
|
||||
StartupWMClass=pyPhotoAlbum
|
||||
Actions=NewProject;
|
||||
|
||||
[Desktop Action NewProject]
|
||||
Name=New Project
|
||||
Exec=$BIN_DIR/pyphotoalbum --new
|
||||
EOF
|
||||
|
||||
print_info "Desktop file created at $DESKTOP_DIR/pyphotoalbum.desktop"
|
||||
|
||||
# Copy icon
|
||||
if [ -f "$SCRIPT_DIR/pyPhotoAlbum/icons/icon.png" ]; then
|
||||
cp "$SCRIPT_DIR/pyPhotoAlbum/icons/icon.png" "$ICON_DIR/256x256/apps/pyphotoalbum.png"
|
||||
print_info "Icon installed"
|
||||
|
||||
# Generate additional icon sizes if ImageMagick is available
|
||||
if command -v convert &> /dev/null || command -v magick &> /dev/null; then
|
||||
for size in 48 64 128; do
|
||||
mkdir -p "$ICON_DIR/${size}x${size}/apps"
|
||||
if command -v magick &> /dev/null; then
|
||||
magick "$SCRIPT_DIR/pyPhotoAlbum/icons/icon.png" -resize ${size}x${size} "$ICON_DIR/${size}x${size}/apps/pyphotoalbum.png" 2>/dev/null
|
||||
else
|
||||
convert "$SCRIPT_DIR/pyPhotoAlbum/icons/icon.png" -resize ${size}x${size} "$ICON_DIR/${size}x${size}/apps/pyphotoalbum.png" 2>/dev/null
|
||||
fi
|
||||
done
|
||||
print_info "Additional icon sizes generated"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Update desktop database
|
||||
if command -v update-desktop-database &> /dev/null; then
|
||||
update-desktop-database "$DESKTOP_DIR" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Update icon cache
|
||||
if command -v gtk-update-icon-cache &> /dev/null; then
|
||||
gtk-update-icon-cache -f "$ICON_DIR" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# Deactivate venv
|
||||
deactivate
|
||||
|
||||
# Final message
|
||||
echo "========================================"
|
||||
echo -e "${GREEN} Installation complete!${NC}"
|
||||
echo "========================================"
|
||||
echo ""
|
||||
echo "You can now run pyPhotoAlbum by:"
|
||||
echo " 1) Running 'pyphotoalbum' in the terminal"
|
||||
echo " 2) Finding 'pyPhotoAlbum' in your application menu"
|
||||
echo ""
|
||||
|
||||
# Check if ~/.local/bin is in PATH
|
||||
if [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then
|
||||
print_warn "~/.local/bin is not in your PATH"
|
||||
echo ""
|
||||
echo "Add this to your ~/.bashrc or ~/.profile:"
|
||||
echo " export PATH=\"\$HOME/.local/bin:\$PATH\""
|
||||
echo ""
|
||||
echo "Then run: source ~/.bashrc"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "To run directly from source directory:"
|
||||
echo " $SCRIPT_DIR/launch-pyphotoalbum.sh"
|
||||
echo ""
|
||||
18
launch-pyphotoalbum.sh
Executable file
18
launch-pyphotoalbum.sh
Executable file
@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
# pyPhotoAlbum launch script
|
||||
# Runs the application from the project directory using the local venv
|
||||
|
||||
# Get the directory where this script is located
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
VENV_DIR="$SCRIPT_DIR/venv"
|
||||
|
||||
# Check if venv exists
|
||||
if [ ! -d "$VENV_DIR" ]; then
|
||||
echo "Error: Virtual environment not found at $VENV_DIR"
|
||||
echo "Please run install-debian.sh first to set up the environment."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Activate venv and run the application
|
||||
source "$VENV_DIR/bin/activate"
|
||||
exec python "$SCRIPT_DIR/pyPhotoAlbum/main.py" "$@"
|
||||
Loading…
x
Reference in New Issue
Block a user