[GH-ISSUE #23997] issue: black library dependency issues in pyodide-lock.json #35676

Closed
opened 2026-04-25 09:52:04 -05:00 by GiteaMirror · 1 comment
Owner

Originally created by @Magwari on GitHub (Apr 22, 2026).
Original GitHub issue: https://github.com/open-webui/open-webui/issues/23997

Check Existing Issues

  • I have searched for any existing and/or related issues.
  • I have searched for any existing and/or related discussions.
  • I have also searched in the CLOSED issues AND CLOSED discussions and found no related items (your issue might already be addressed on the development branch!).
  • I am using the latest version of Open WebUI.

Installation Method

Git Clone

Open WebUI Version

v0.9.1

Ollama Version (if applicable)

No response

Operating System

Rocky 9

Browser (if applicable)

No response

Confirmation

  • I have read and followed all instructions in README.md.
  • I am using the latest version of both Open WebUI and Ollama.
  • I have included the browser console logs.
  • I have included the Docker container logs.
  • I have provided every relevant configuration, setting, and environment variable used in my setup.
  • I have clearly listed every relevant configuration, custom setting, environment variable, and command-line option that influences my setup (such as Docker Compose overrides, .env values, browser settings, authentication configurations, etc).
  • I have documented step-by-step reproduction instructions that are precise, sequential, and leave nothing to interpretation. My steps:
  • Start with the initial platform/version/OS and dependencies used,
  • Specify exact install/launch/configure commands,
  • List URLs visited, user input (incl. example values/emails/passwords if needed),
  • Describe all options and toggles enabled or changed,
  • Include any files or environmental changes,
  • Identify the expected and actual result at each stage,
  • Ensure any reasonably skilled user can follow and hit the same issue.

Expected Behavior

Non-admin users can create tools in a Pyodide environment with properly imported dependency modules.

Actual Behavior

While creating a tool, pyodide raises an exception indicating it cannot find 'click', which is a dependency of black.

Steps to Reproduce

I installed Open WebUI from source.
My environment is offline, so I need to bring it in after vite build.

git clone https://github.com/open-webui/open-webui.git
cd open-webui
npm install
npm run build

send to offline server...

cd backend
pip install -r requirements.txt -U --no-index --find-links {MY_WHEEL_PATH}
sh dev.sh

then make non-admin user and make tool.

Logs & Screenshots

Unfortunately, I'm unable to provide the internal logs due to company security policies. My apologies for the inconvenience.

Additional Information

This issue is likely related to modifying prepare-pyodide.js to allow loading the black library in offline environments (see https://github.com/open-webui/open-webui/issues/22509). The problem occurs when writing libraries fetched from PyPI into the pyodide-lock.json file.

  1. Missing Dependencies in pyodide-lock.json: The black library entry does not include its required dependencies (click, mypy-extensions, packaging, pathspec, platformdirs, pytokens) in the depends field.

  2. Package Name Inconsistency: The package name in pyodide-lock.json uses underscores (mypy_extensions) while micropip expects hyphens (mypy-extensions), causing lookup failures.

I have successfully resolved the issue by modifying the build/pyodide/pyodide-lock.json file as shown below. After this change and adding pytokens(add pypi library list in prepare-pyodide.js), pyodide can now properly load the black library and its dependencies in my enviornment.

<<<<<<< Current
    "black": {
      "name": "black",
      "version": "26.3.1",
      "file_name": "black-26.3.1-py3-none-any.whl",
      "install_dir": "site",
      "sha256": "2bd5aa94fc267d38bb21a70d7410a89f1a1d318841855f698746f8e7f51acd1b",
      "package_type": "package",
      "imports": [
        "black"
      ],
      "depends": []
    },
    "pathspec": {
      "name": "pathspec",
      "version": "1.0.4",
      "file_name": "pathspec-1.0.4-py3-none-any.whl",
      "install_dir": "site",
      "sha256": "fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723",
      "package_type": "package",
      "imports": [
        "pathspec"
      ],
      "depends": []
    },
    "mypy_extensions": {
      "name": "mypy_extensions",
      "version": "1.1.0",
      "file_name": "mypy_extensions-1.1.0-py3-none-any.whl",
      "install_dir": "site",
      "sha256": "1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505",
      "package_type": "package",
      "imports": [
        "mypy_extensions"
      ],
      "depends": []
    }
=======
    "black": {
      "name": "black",
      "version": "26.3.1",
      "file_name": "black-26.3.1-py3-none-any.whl",
      "install_dir": "site",
      "sha256": "2bd5aa94fc267d38bb21a70d7410a89f1a1d318841855f698746f8e7f51acd1b",
      "package_type": "package",
      "imports": [
        "black"
      ],
      "depends": [
        "click",
        "mypy-extensions",
        "packaging",
        "pathspec",
        "platformdirs",
        "pytokens"
      ]
    },
    "pathspec": {
      "name": "pathspec",
      "version": "1.0.4",
      "file_name": "pathspec-1.0.4-py3-none-any.whl",
      "install_dir": "site",
      "sha256": "fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723",
      "package_type": "package",
      "imports": [
        "pathspec"
      ],
      "depends": [
        "typing-extensions"
      ]
    },
    "mypy-extensions": {
      "name": "mypy-extensions",
      "version": "1.1.0",
      "file_name": "mypy_extensions-1.1.0-py3-none-any.whl",
      "install_dir": "site",
      "sha256": "1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505",
      "package_type": "package",
      "imports": [
        "mypy-extensions"
      ],
      "depends": []
    },
    "pytokens": {
      "name": "pytokens",
      "version": "0.4.1",
      "file_name": "pytokens-0.4.1-py3-none-any.whl",
      "install_dir": "site",
      "sha256": "26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de",
      "package_type": "package",
      "imports": [
        "pytokens"
      ],
      "depends": []
    }
>>>>>>> ToBE

script/prepare-pyodide.js needs to be updated to address the above issues when fetching libraries from PyPI during the build process.

Originally created by @Magwari on GitHub (Apr 22, 2026). Original GitHub issue: https://github.com/open-webui/open-webui/issues/23997 ### Check Existing Issues - [x] I have searched for any existing and/or related issues. - [x] I have searched for any existing and/or related discussions. - [x] I have also searched in the CLOSED issues AND CLOSED discussions and found no related items (your issue might already be addressed on the development branch!). - [x] I am using the latest version of Open WebUI. ### Installation Method Git Clone ### Open WebUI Version v0.9.1 ### Ollama Version (if applicable) _No response_ ### Operating System Rocky 9 ### Browser (if applicable) _No response_ ### Confirmation - [x] I have read and followed all instructions in `README.md`. - [x] I am using the latest version of **both** Open WebUI and Ollama. - [ ] I have included the browser console logs. - [ ] I have included the Docker container logs. - [x] I have **provided every relevant configuration, setting, and environment variable used in my setup.** - [x] I have clearly **listed every relevant configuration, custom setting, environment variable, and command-line option that influences my setup** (such as Docker Compose overrides, .env values, browser settings, authentication configurations, etc). - [x] I have documented **step-by-step reproduction instructions that are precise, sequential, and leave nothing to interpretation**. My steps: - Start with the initial platform/version/OS and dependencies used, - Specify exact install/launch/configure commands, - List URLs visited, user input (incl. example values/emails/passwords if needed), - Describe all options and toggles enabled or changed, - Include any files or environmental changes, - Identify the expected and actual result at each stage, - Ensure any reasonably skilled user can follow and hit the same issue. ### Expected Behavior Non-admin users can create tools in a Pyodide environment with properly imported dependency modules. ### Actual Behavior While creating a tool, pyodide raises an exception indicating it cannot find 'click', which is a dependency of black. ### Steps to Reproduce I installed Open WebUI from source. My environment is offline, so I need to bring it in after vite build. ``` git clone https://github.com/open-webui/open-webui.git cd open-webui npm install npm run build ``` send to offline server... ``` cd backend pip install -r requirements.txt -U --no-index --find-links {MY_WHEEL_PATH} sh dev.sh ``` then make non-admin user and make tool. ### Logs & Screenshots Unfortunately, I'm unable to provide the internal logs due to company security policies. My apologies for the inconvenience. ### Additional Information This issue is likely related to modifying prepare-pyodide.js to allow loading the black library in offline environments (see https://github.com/open-webui/open-webui/issues/22509). The problem occurs when writing libraries fetched from PyPI into the pyodide-lock.json file. 1. Missing Dependencies in pyodide-lock.json: The black library entry does not include its required dependencies (click, mypy-extensions, packaging, pathspec, platformdirs, pytokens) in the depends field. 2. Package Name Inconsistency: The package name in pyodide-lock.json uses underscores (mypy_extensions) while micropip expects hyphens (mypy-extensions), causing lookup failures. I have successfully resolved the issue by modifying the build/pyodide/pyodide-lock.json file as shown below. After this change and adding pytokens(add pypi library list in prepare-pyodide.js), pyodide can now properly load the black library and its dependencies in my enviornment. ```json <<<<<<< Current "black": { "name": "black", "version": "26.3.1", "file_name": "black-26.3.1-py3-none-any.whl", "install_dir": "site", "sha256": "2bd5aa94fc267d38bb21a70d7410a89f1a1d318841855f698746f8e7f51acd1b", "package_type": "package", "imports": [ "black" ], "depends": [] }, "pathspec": { "name": "pathspec", "version": "1.0.4", "file_name": "pathspec-1.0.4-py3-none-any.whl", "install_dir": "site", "sha256": "fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", "package_type": "package", "imports": [ "pathspec" ], "depends": [] }, "mypy_extensions": { "name": "mypy_extensions", "version": "1.1.0", "file_name": "mypy_extensions-1.1.0-py3-none-any.whl", "install_dir": "site", "sha256": "1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", "package_type": "package", "imports": [ "mypy_extensions" ], "depends": [] } ======= "black": { "name": "black", "version": "26.3.1", "file_name": "black-26.3.1-py3-none-any.whl", "install_dir": "site", "sha256": "2bd5aa94fc267d38bb21a70d7410a89f1a1d318841855f698746f8e7f51acd1b", "package_type": "package", "imports": [ "black" ], "depends": [ "click", "mypy-extensions", "packaging", "pathspec", "platformdirs", "pytokens" ] }, "pathspec": { "name": "pathspec", "version": "1.0.4", "file_name": "pathspec-1.0.4-py3-none-any.whl", "install_dir": "site", "sha256": "fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", "package_type": "package", "imports": [ "pathspec" ], "depends": [ "typing-extensions" ] }, "mypy-extensions": { "name": "mypy-extensions", "version": "1.1.0", "file_name": "mypy_extensions-1.1.0-py3-none-any.whl", "install_dir": "site", "sha256": "1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", "package_type": "package", "imports": [ "mypy-extensions" ], "depends": [] }, "pytokens": { "name": "pytokens", "version": "0.4.1", "file_name": "pytokens-0.4.1-py3-none-any.whl", "install_dir": "site", "sha256": "26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de", "package_type": "package", "imports": [ "pytokens" ], "depends": [] } >>>>>>> ToBE ``` script/prepare-pyodide.js needs to be updated to address the above issues when fetching libraries from PyPI during the build process.
GiteaMirror added the bug label 2026-04-25 09:52:04 -05:00
Author
Owner

@tjbck commented on GitHub (Apr 24, 2026):

pytokens added.

<!-- gh-comment-id:4312304078 --> @tjbck commented on GitHub (Apr 24, 2026): `pytokens` added.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/open-webui#35676