更新:Pyodide v0.21.0
从 Pyodide 0.18.0 开始,异步运行Python不会自动加载包,所以从导入加载包应该提前打电话。
因此,要导入第三方包,例如numpy
我们有两个选择:我们可以手动预加载所需的包,然后在 Python 中导入它们
// JS
await pyodide.loadPackage('numpy');
// numpy is now available
pyodide.runPython('import numpy as np')
console.log(pyodide.runPython('np.ones((3, 3)))').toJs())
或者我们可以使用从导入加载包函数将自动下载代码片段导入的所有包:
// JS
let python_code = `
import numpy as np
np.ones((3,3))
`
(async () => { // enable await
await pyodide.loadPackagesFromImports(python_code)
let result = await pyodide.runPythonAsync(python_code)
console.log(result.toJs())
})() // call the function immediately
可以找到更多示例here
(async () => { // enable await
let python_code = `
import numpy as np
np.ones((3,3))
`
let pyodide = await loadPyodide();
await pyodide.loadPackagesFromImports(python_code)
console.log(pyodide.runPython(python_code).toJs())
})() // call the function immediately
<script src="https://pyodide-cdn2.iodide.io/v0.21.0/full/pyodide.js"></script>
另请注意,从版本 0.17 开始,Pyodide 对非 JS 数据类型使用 JsProxy。因此,在打印结果之前,必须使用进行转换toJs.
旧答案(与 Pyodide v0.15.0 相关)
目前尚不清楚你传递的是什么<address>
in pyodide.loadPackage('<address>')
,但它应该只是包名称(例如numpy
).
另请注意,Pyodide 目前支持的软件包数量有限。看看这个tutorial了解更多详细信息。
如果你想导入第三方包,例如numpy
有两种选择:您可以手动预加载所需的包,然后使用Python将它们导入pyodide.loadPackage
and pyodide.runPython
功能:
pyodide.loadPackage('numpy').then(() => {
// numpy is now available
pyodide.runPython('import numpy as np')
console.log(pyodide.runPython('np.ones((3, 3)))'))
})
或者你可以使用pyodide.runPythonAsync
函数将自动下载代码片段导入的所有包。
这是最小的例子pyodide.runPythonAsync
let python_code = `
import numpy as np
np.ones((3,3))
`
// init environment, then run python code
languagePluginLoader.then(() => {
pyodide.runPythonAsync(python_code).then(output => alert(output))
})
<script type="text/javascript">
// Default Pyodide files URL ('packages.json', 'pyodide.asm.data', etc.)
window.languagePluginUrl = 'https://cdn.jsdelivr.net/pyodide//v0.15.0/full/';
</script>
<script src="https://cdn.jsdelivr.net/pyodide/v0.15.0/full/pyodide.js"></script>