簡體   English   中英

如何使用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>')    

(這將返回一個關於我運行此方法的解決方案的承諾)

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 代碼,只是為了避免混淆。

我什至嘗試將模塊上傳到服務器,因為文檔提到了使用 HTTP 協議的 URL,嘗試這樣做非常愚蠢,但我做到了。

文檔: https : //pyodide.readthedocs.io/en/latest/using_pyodide_from_javascript.html#loading-packages

目前尚不清楚您在pyodide.loadPackage('<address>')作為<address>傳遞的是什么,但它應該只是包名稱(例如numpy )。

另請注意,Pyodide 目前支持的軟件包數量有限。 查看我的教程以獲取更多詳細信息。

如果你想導入像numpy這樣的第三方包,有兩個選項:你可以手動預加載所需的包,然后使用pyodide.loadPackagepyodide.runPython函數在 Python 中導入它們:

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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM