Skip to content
This repository was archived by the owner on Oct 6, 2025. It is now read-only.

Commit 7d5b88e

Browse files
authored
User updating
1 parent d53ae5a commit 7d5b88e

8 files changed

Lines changed: 28 additions & 13 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
55
A simple demonstration to wrap [`@monaco-editor/react`](https://www.npmjs.com/package/@monaco-editor/react) combined with [`Pyodide`](https://pyodide.org/en/stable/index.html) to create a basic online Python editor component with a few additional packages supported. The React app is [created/built by Vite](https://vitejs.dev/) and deployed to GitHub Pages using Github Actions.
66

7-
`/src/data/pyodide-settings.json` defines the Pyodide version and packages that would be pre-loaded. Pyodide will automatically install [supported external packages](https://pyodide.org/en/stable/usage/packages-in-pyodide.html) found in imports.
7+
`preload_packages.jsonn` defines the Python packages that would be pre-loaded. Pyodide will also automatically install [supported external packages](https://pyodide.org/en/stable/usage/packages-in-pyodide.html) found in imports.
88

99
## Development
1010

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@
77
"dev": "vite --port 3000 --open --host",
88
"start": "yarn dev",
99
"build": "vite build",
10-
"preview": "vite preview --port 8080 --open --host",
10+
"preview": "yarn copy_pyodide_version && vite preview --port 8080 --open --host",
1111
"serve": "yarn preview",
1212
"pull": "git pull origin main",
1313
"push": "git add . && git commit -m \"User updating\" && git push origin main",
14-
"commit": "yarn pull && yarn push"
14+
"commit": "yarn pull && yarn push",
15+
"copy_pyodide_version": "jq '{version: .dependencies.pyodide}' package.json > src/data/pyodide_version.json"
1516
},
1617
"dependencies": {
1718
"@monaco-editor/react": "^4.7.0",

src/component/MonacoEditor.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const MonacoEditor: FunctionComponent<MonacoEditorProps> = ({
2121
const [consoleOutput, setConsoleOutput] = useState<string[]>([]);
2222

2323
useEffect(() => {
24-
LoadPyodide().then((loaded) => setPyodide(loaded));
24+
if (!pyodide) LoadPyodide().then((loaded) => setPyodide(loaded));
2525
});
2626

2727
return (
@@ -40,7 +40,7 @@ const MonacoEditor: FunctionComponent<MonacoEditorProps> = ({
4040
<div className={styles.padded}>
4141
<Editor
4242
height="100vh"
43-
theme={editorDarkMode ? "hc-black" : "hc-light"}
43+
theme={editorDarkMode ? "vs-dark" : "vs"}
4444
options={EditorOptions}
4545
language="python"
4646
value={editorCode}

src/component/MonacoEditorExecute.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { loadPyodide, type PyodideInterface } from "pyodide";
2-
import pyodideSettings from "../data/pyodide-settings.json";
2+
import preload_python_packages from "../data/preload_packages.json";
33

44
let consoleOutput: string[] = [];
55

@@ -9,11 +9,22 @@ const stdout = (msg: any) => {
99
};
1010

1111
export const LoadPyodide = async (): Promise<PyodideInterface> => {
12+
let pyodide_version = "0.0.0";
13+
14+
if (import.meta.env.DEV) {
15+
pyodide_version = (await import('../../package.json')).dependencies.pyodide;
16+
} else {
17+
pyodide_version = (await import('../data/pyodide_version.json')).version;
18+
}
19+
pyodide_version = pyodide_version.replaceAll('^', '').replaceAll('~', '');
20+
21+
console.log(`Found Pyodide version: ${pyodide_version}`);
22+
1223
return loadPyodide({
13-
indexURL: `https://cdn.jsdelivr.net/pyodide/v${pyodideSettings.version}/full/`,
24+
indexURL: `https://cdn.jsdelivr.net/pyodide/v${pyodide_version}/full/`,
1425
stdout: stdout,
1526
stderr: stdout,
16-
packages : pyodideSettings.preload_packages,
27+
packages: preload_python_packages,
1728
checkAPIVersion: true,
1829
});
1930
};

src/data/exampleCode.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,7 @@ get_target_names = lambda label: iris.target_names[label]
2626
df['species'] = get_target_names(iris.target)
2727

2828
print(df, end='\n\n')
29-
print(df.describe())
29+
print(df.describe(), end='\n\n')
30+
31+
import sys
32+
print('Python kernel:', sys.version)

src/data/preload_packages.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]

src/data/pyodide-settings.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

src/data/pyodide_version.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"version": "^0.27.5"
3+
}

0 commit comments

Comments
 (0)