51 lines
1.2 KiB
JavaScript
51 lines
1.2 KiB
JavaScript
import { execSync } from "child_process";
|
||
import { writeFileSync } from "fs";
|
||
import path from "path";
|
||
|
||
const candidates = [
|
||
"/usr/bin/python3.9",
|
||
"python3",
|
||
"python"
|
||
];
|
||
|
||
const pythonPathFile = path.resolve(process.cwd(), "python-path.txt");
|
||
|
||
function checkPython(pythonCmd) {
|
||
try {
|
||
execSync(`${pythonCmd} --version`, { stdio: "ignore" });
|
||
execSync(`${pythonCmd} -m pip --version`, { stdio: "ignore" });
|
||
return true;
|
||
} catch {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
function installDeps(pythonCmd) {
|
||
try {
|
||
console.log(`Using Python command: ${pythonCmd}`);
|
||
execSync(`${pythonCmd} -m pip install -r requirements.txt`, { stdio: "inherit" });
|
||
writeFileSync(pythonPathFile, pythonCmd, "utf-8");
|
||
console.log(`✅ Python packages installed successfully. Saved Python path to ${pythonPathFile}`);
|
||
process.exit(0);
|
||
} catch (err) {
|
||
console.error("Failed to install Python packages with", pythonCmd);
|
||
}
|
||
}
|
||
|
||
function main() {
|
||
for (const cmd of candidates) {
|
||
if (checkPython(cmd)) {
|
||
installDeps(cmd);
|
||
return;
|
||
}
|
||
}
|
||
console.error(
|
||
"\n⚠️ Python or pip not found or pip is broken.\n" +
|
||
"Please install Python 3 and pip manually, then run:\n\n" +
|
||
" pip install -r requirements.txt\n"
|
||
);
|
||
process.exit(1);
|
||
}
|
||
|
||
main();
|