CoolFace
Apppublic

beea/open-webui

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
prepare-pyodide.js86 linesDownload Raw Back to scripts
1const packages = [2	'micropip',3	'packaging',4	'requests',5	'beautifulsoup4',6	'numpy',7	'pandas',8	'matplotlib',9	'scikit-learn',10	'scipy',11	'regex',12	'seaborn'13];14 15import { loadPyodide } from 'pyodide';16import { writeFile, readFile, copyFile, readdir, rmdir } from 'fs/promises';17 18async function downloadPackages() {19	console.log('Setting up pyodide + micropip');20 21	let pyodide;22	try {23		pyodide = await loadPyodide({24			packageCacheDir: 'static/pyodide'25		});26	} catch (err) {27		console.error('Failed to load Pyodide:', err);28		return;29	}30 31	const packageJson = JSON.parse(await readFile('package.json'));32	const pyodideVersion = packageJson.dependencies.pyodide.replace('^', '');33 34	try {35		const pyodidePackageJson = JSON.parse(await readFile('static/pyodide/package.json'));36		const pyodidePackageVersion = pyodidePackageJson.version.replace('^', '');37 38		if (pyodideVersion !== pyodidePackageVersion) {39			console.log('Pyodide version mismatch, removing static/pyodide directory');40			await rmdir('static/pyodide', { recursive: true });41		}42	} catch (e) {43		console.log('Pyodide package not found, proceeding with download.');44	}45 46	try {47		console.log('Loading micropip package');48		await pyodide.loadPackage('micropip');49 50		const micropip = pyodide.pyimport('micropip');51		console.log('Downloading Pyodide packages:', packages);52 53		try {54			for (const pkg of packages) {55				console.log(`Installing package: ${pkg}`);56				await micropip.install(pkg);57			}58		} catch (err) {59			console.error('Package installation failed:', err);60			return;61		}62 63		console.log('Pyodide packages downloaded, freezing into lock file');64 65		try {66			const lockFile = await micropip.freeze();67			await writeFile('static/pyodide/pyodide-lock.json', lockFile);68		} catch (err) {69			console.error('Failed to write lock file:', err);70		}71	} catch (err) {72		console.error('Failed to load or install micropip:', err);73	}74}75 76async function copyPyodide() {77	console.log('Copying Pyodide files into static directory');78	// Copy all files from node_modules/pyodide to static/pyodide79	for await (const entry of await readdir('node_modules/pyodide')) {80		await copyFile(`node_modules/pyodide/${entry}`, `static/pyodide/${entry}`);81	}82}83 84await downloadPackages();85await copyPyodide();86