如何在使用 pyodide 的项目中无错误地导入模块?
How do I import modules in a project using pyodide without errors?
每当我在 pyodide 中导入 python 模块时,都会出现此错误。
pyodide.js:108 Invalid package name or URI
我不确定如何正确导入模块,
我已经尝试过文档中提到的这个。
pyodide.loadPackage('<module address>')
(这个 returns 对谁的决议的承诺 我 运行 这个方法)
pyodide.runPython('
<python code here>
')
执行后出现上述错误
Javascript代码:
<html>
<head>
<script type="text/javascript">
// set the pyodide files URL (packages.json, pyodide.asm.data etc)
window.languagePluginUrl = 'https://pyodide-cdn2.iodide.io/v0.15.0/full/';
</script>
<script src="https://pyodide-cdn2.iodide.io/v0.15.0/full/pyodide.js"></script>
</head>
<body>
Pyodide test page <br>
Open your browser console to see pyodide output
<script type="text/javascript">
languagePluginLoader.then(function () {
pyodide.loadPackage('<address>').then(() => {
console.log(pyodide.runPython('
import sys
from <my package> import *
sys.version
'));
console.log(pyodide.runPython('print(1 + 2)'));
});
});
</script>
</body>
</html>
这个问题有可能不清楚,但如果你理解有困难,请告诉我。
另外,runPython()
方法中传入的字符串是python代码,只是为了避免混淆。
我什至尝试将模块上传到服务器,正如文档中提到的那样 URL 使用 HTTP 协议,尝试这样做非常愚蠢,但我做到了。
文档:https://pyodide.readthedocs.io/en/latest/using_pyodide_from_javascript.html#loading-packages
不清楚您在 pyodide.loadPackage('<address>')
中作为 <address>
传递的是什么,但它应该只是包名称(例如 numpy
)。
另请注意,Pyodide 目前支持的软件包数量有限。查看我的tutorial了解更多详情。
如果您想像 numpy
一样导入 third-party 包,有两种选择:您可以手动 pre-load 需要的包,然后使用 Python 导入它们pyodide.loadPackage
和 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))
})
<!DOCTYPE html>
<html>
<head>
<script src="https://pyodide-cdn2.iodide.io/v0.15.0/full/pyodide.js"></script>
</head>
<body>
</body>
</html>
每当我在 pyodide 中导入 python 模块时,都会出现此错误。
pyodide.js:108 Invalid package name or URI
我不确定如何正确导入模块, 我已经尝试过文档中提到的这个。
pyodide.loadPackage('<module address>')
(这个 returns 对谁的决议的承诺 我 运行 这个方法)
pyodide.runPython('
<python code here>
')
执行后出现上述错误
Javascript代码:
<html>
<head>
<script type="text/javascript">
// set the pyodide files URL (packages.json, pyodide.asm.data etc)
window.languagePluginUrl = 'https://pyodide-cdn2.iodide.io/v0.15.0/full/';
</script>
<script src="https://pyodide-cdn2.iodide.io/v0.15.0/full/pyodide.js"></script>
</head>
<body>
Pyodide test page <br>
Open your browser console to see pyodide output
<script type="text/javascript">
languagePluginLoader.then(function () {
pyodide.loadPackage('<address>').then(() => {
console.log(pyodide.runPython('
import sys
from <my package> import *
sys.version
'));
console.log(pyodide.runPython('print(1 + 2)'));
});
});
</script>
</body>
</html>
这个问题有可能不清楚,但如果你理解有困难,请告诉我。
另外,runPython()
方法中传入的字符串是python代码,只是为了避免混淆。
我什至尝试将模块上传到服务器,正如文档中提到的那样 URL 使用 HTTP 协议,尝试这样做非常愚蠢,但我做到了。
文档:https://pyodide.readthedocs.io/en/latest/using_pyodide_from_javascript.html#loading-packages
不清楚您在 pyodide.loadPackage('<address>')
中作为 <address>
传递的是什么,但它应该只是包名称(例如 numpy
)。
另请注意,Pyodide 目前支持的软件包数量有限。查看我的tutorial了解更多详情。
如果您想像 numpy
一样导入 third-party 包,有两种选择:您可以手动 pre-load 需要的包,然后使用 Python 导入它们pyodide.loadPackage
和 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))
})
<!DOCTYPE html>
<html>
<head>
<script src="https://pyodide-cdn2.iodide.io/v0.15.0/full/pyodide.js"></script>
</head>
<body>
</body>
</html>