PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]; try { $pdo = new PDO($dsn, DB_USER, DB_PASS, $options); // Fetch dependencies from PyPi table // Note: We select LibName. If AliasName represents a specific version or URI, it can be appended. $stmt = $pdo->query("SELECT LibName, VersionOrTag FROM PyPi ORDER BY LibName"); $requirements = []; foreach ($stmt as $row) { $line = $row['LibName']; if (!empty($row['VersionOrTag'])) { $line .= '==' . $row['VersionOrTag']; } $requirements[] = $line; } // Build requirements.txt content (Plain Text, one per line) $output = implode("\n", $requirements); // Write to file (stdout for Makefile redirection) file_put_contents('php://stdout', $output . "\n"); file_put_contents("php://stderr", "✅ requirements.txt generated successfully.\n"); } catch (PDOException $e) { file_put_contents("php://stderr", "❌ Database error: " . $e->getMessage() . "\n"); }