簡體   English   中英

無法在 Pyodide 中導入 python 包

[英]Unable to import a python package in Pyodide

我正在嘗試在Pyodide中導入自定義包,但它不起作用。

目錄結構是

index.html
package/
    __init__.py

我的 index.html 看起來像這樣

<!DOCTYPE html>
<html>
  <head>
    <script src="https://cdn.jsdelivr.net/pyodide/v0.19.1/full/pyodide.js"></script>
  </head>
  <body>
    Pyodide test page <br />
    Open your browser console to see Pyodide output
    <script type="text/javascript">
      async function main() {
        let pyodide = await loadPyodide({
          indexURL: "https://cdn.jsdelivr.net/pyodide/v0.19.1/full/",
        });

        let mypkg = pyodide.pyimport("package");
        mypkg.main();
      }
      main();
    </script>
  </body>
</html>

有誰知道為什么會這樣?

我收到錯誤

ModuleNotFoundError: No module named 'package'

對於 Pyodide,Python 直接在瀏覽器中運行,因此它無法查看本地文件系統中的文件。 它只能在Emscripten 提供的虛擬文件系統中導入模塊。

Pyodide 文檔中所述,您需要將文件復制到虛擬文件系統中才能運行。 有兩種可能,

  • 假設它是純 Python,
    1. 從你的包中創建一個 Python wheel
    2. 使其可通過網絡服務器訪問。 例如,將輪子放在某個本地文件夾中,然后在該文件夾中使用python -m http.server啟動 Python Web 服務器。
    3. 最后,通過提供 URL 使用 micropip 安裝它,
     import micropip await micropip.install('<url-to-the-wheel.whl>') import your_package
  • 另一個解決方案是
    1. 使用您的包創建一個 tar 或 zip 存檔,
     zip -r package.zip package/
    1. 通過一些 HTTP 服務器提供服務(同上)
    2. 按照文檔中的描述下載並解壓縮存檔,
       await pyodide.runPythonAsync(` from pyodide.http import pyfetch response = await pyfetch("https://.../your_package.tar.gz") #.zip, .whl, ... await response.unpack_archive() # by default, unpacks to the current dir `) pkg = pyodide.pyimport("your_package"); pkg.do_something();
      如果將此存檔解壓縮到與本地文件夾不同的文件夾,則需要將其添加到sys.path以便 Python 找到它。

我很好奇 await loadPyodide() 語句中的 indexURL 參數。 您已經將 URL 包含在 index.html 的頭部。 是否有必要在等待 loadPyodide 的調用中再次包含它? 文檔顯示 loadPyodide() 被調用時根本沒有任何參數,如下所示:

let pyodide = await loadPyodide();

https://pyodide.org/en/stable/usage/quickstart.html

暫無
暫無

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

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