PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]; try { $pdo = new PDO($dsn, "root", "", $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, AliasName FROM PyPi ORDER BY LibName"); $requirements = []; foreach ($stmt as $row) { // Standard requirements.txt format is usually "PackageName" or "PackageName==Version" // If AliasName is used for versioning, you could use: $row['LibName'] . "==" . $row['AliasName'] $requirements[] = $row['LibName']; } // 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"); }