Offline model plugin installation fails, always reporting different library version conflicts

Local Deployment

Failed to install DeepSeek model plugin, Ollama model plugin, and Tongyi model plugin.

Plugin container image version langgenius/dify-plugin-daemon:0.5.2-local

After using the dify-plugin-repackaging project to convert the plugin installation package into an offline version, the installation prompted a version conflict.

[ERROR]local runtime start failed: langgenius/deepseek:0.0.9@eafbab2061d8f17d307120444f977117e4d937e90a02465548902db983e029f0, error: failed to install dependencies: failed to install dependencies: exit status 1, output: DEBUG uv 0.9.18
TRACE Checking lock for /root/.cache/uv at /root/.cache/uv/.lock
DEBUG Acquired shared lock for /root/.cache/uv
DEBUG Searching for default Python interpreter in virtual environments
TRACE Querying interpreter executable at /app/storage/cwd/langgenius/deepseek-0.0.9@eafbab2061d8f17d307120444f977117e4d937e90a02465548902db983e029f0/.venv/bin/python3
DEBUG Found cpython-3.12.3-linux-x86_64-gnu at /app/storage/cwd/langgenius/deepseek-0.0.9@eafbab2061d8f17d307120444f977117e4d937e90a02465548902db983e029f0/.venv/bin/python3 (active virtual environment)
DEBUG Using Python 3.12.3 environment at: .venv
TRACE Checking lock for .venv at .venv/.lock
DEBUG Acquired exclusive lock for .venv
DEBUG At least one requirement is not satisfied: dify-plugin~=0.7.1
DEBUG Using request timeout of 30s
DEBUG Found 37 packages in --find-links entry: file:///app/storage/cwd/langgenius/deepseek-0.0.9@eafbab2061d8f17d307120444f977117e4d937e90a02465548902db983e029f0/wheels
DEBUG Solving with installed Python version: 3.12.3
DEBUG Solving with target Python version: >=3.12.3
TRACE Assigned packages:
TRACE Chose package for decision: root. remaining choices:
DEBUG Adding direct dependency: dify-plugin>=0.7.1, <0.8.dev0
INFO add_decision: Id::(0) @ 0a0.dev0 without checking dependencies
TRACE Assigned packages: root==0a0.dev0
TRACE Chose package for decision: dify-plugin. remaining choices:
TRACE Received package metadata for: dify-plugin
DEBUG Searching for a compatible version of dify-plugin (>=0.7.1, <0.8.dev0)
TRACE Selecting candidate for dify-plugin with range >=0.7.1, <0.8.dev0 with 1 remote versions
TRACE Selecting candidate for dify-plugin with range >=0.7.1, <0.8.dev0 with 1 remote versions
TRACE Found candidate for package dify-plugin with range >=0.7.1, <0.8.dev0 after 1 steps: 0.7.1 version
TRACE Found candidate for package dify-plugin with range >=0.7.1, <0.8.dev0 after 1 steps: 0.7.1 version
TRACE Returning candidate for package dify-plugin with range >=0.7.1, <0.8.dev0 after 1 steps
TRACE Returning candidate for package dify-plugin with range >=0.7.1, <0.8.dev0 after 1 steps
DEBUG Selecting: dify-plugin==0.7.1 [compatible] (dify_plugin-0.7.1-py3-none-any.whl)
TRACE Received built distribution metadata for: dify-plugin==0.7.1
DEBUG Adding transitive dependency for dify-plugin==0.7.1: flask>=3.0.3, <3.1.dev0
DEBUG Adding transitive dependency for dify-plugin==0.7.1: werkzeug>=3.1.4, <3.2.dev0
DEBUG Adding transitive dependency for dify-plugin==0.7.1: dpkt>=1.9.8, <1.10.dev0
DEBUG Adding transitive dependency for dify-plugin==0.7.1: gevent>=25.5.1, <25.6.dev0
DEBUG Adding transitive dependency for dify-plugin==0.7.1: httpx>=0.28.1, <0.29.dev0
DEBUG Adding transitive dependency for dify-plugin==0.7.1: pydantic-settings>=2.5.0, <3.0.0
DEBUG Adding transitive dependency for dify-plugin==0.7.1: pydantic>=2.8.2
DEBUG Adding transitive dependency for dify-plugin==0.7.1: pyyaml>=6.0.1, <6.1.dev0
DEBUG Adding transitive dependency for dify-plugin==0.7.1: requests>=2.32.3, <2.33.dev0
DEBUG Adding transitive dependency for dify-plugin==0.7.1: socksio>=1.0.0, <1.0.0+
DEBUG Adding transitive dependency for dify-plugin==0.7.1: tiktoken>=0.8.0, <0.9.dev0
DEBUG Adding transitive dependency for dify-plugin==0.7.1: yarl>=1.9.4, <2.0
DEBUG Adding transitive dependency for dify-plugin==0.7.1: packaging>=25.0
INFO add_decision: Id::(1) @ 0.7.1 without checking dependencies
TRACE Received package metadata for: flask
TRACE Received package metadata for: werkzeug
TRACE Assigned packages: root==0a0.dev0, dify-plugin==0.7.1
TRACE Received package metadata for: dpkt
TRACE Chose package for decision: socksio. remaining choices: flask, werkzeug, dpkt, gevent, httpx, pydantic-settings, pydantic, pyyaml, requests, packaging, tiktoken, yarl
TRACE Received package metadata for: gevent
TRACE Received package metadata for: httpx
TRACE Received package metadata for: pydantic-settings
TRACE Received package metadata for: pydantic
TRACE Received package metadata for: pyyaml
TRACE Received package metadata for: requests
TRACE Received package metadata for: socksio
TRACE Received package metadata for: tiktoken
TRACE Received package metadata for: yarl
DEBUG Searching for a compatible version of socksio (>=1.0.0, <1.0.0+)
TRACE Received package metadata for: packaging
TRACE Selecting candidate for socksio with range >=1.0.0, <1.0.0+ with 1 remote versions
TRACE Selecting candidate for packaging with range >=25.0 with 1 remote versions
TRACE Found candidate for package socksio with range >=1.0.0, <1.0.0+ after 1 steps: 1.0.0 version
TRACE Found candidate for package packaging with range >=25.0 after 1 steps: 26.0 version
TRACE Returning candidate for package socksio with range >=1.0.0, <1.0.0+ after 1 steps
TRACE Returning candidate for package packaging with range >=25.0 after 1 steps
DEBUG Selecting: socksio==1.0.0 [compatible] (socksio-1.0.0-py3-none-any.whl)
TRACE Selecting candidate for yarl with range >=1.9.4, <2.0 with 1 remote versions
TRACE Found candidate for package yarl with range >=1.9.4, <2.0 after 1 steps: 1.22.0 version
TRACE Returning incompatible candidate for package yarl with range >=1.9.4, <2.0 after 1 steps
TRACE Selecting candidate for tiktoken with range >=0.8.0, <0.9.dev0 with 1 remote versions
TRACE Found candidate for package tiktoken with range >=0.8.0, <0.9.dev0 after 1 steps: 0.8.0 version
TRACE Returning incompatible candidate for package tiktoken with range >=0.8.0, <0.9.dev0 after 1 steps
TRACE Selecting candidate for socksio with range >=1.0.0, <1.0.0+ with 1 remote versions
TRACE Found candidate for package socksio with range >=1.0.0, <1.0.0+ after 1 steps: 1.0.0 version
TRACE Returning candidate for package socksio with range >=1.0.0, <1.0.0+ after 1 steps
TRACE Selecting candidate for requests with range >=2.32.3, <2.33.dev0 with 1 remote versions
TRACE Found candidate for package requests with range >=2.32.3, <2.33.dev0 after 1 steps: 2.32.5 version
TRACE Returning candidate for package requests with range >=2.32.3, <2.33.dev0 after 1 steps
TRACE Selecting candidate for pyyaml with range >=6.0.1, <6.1.dev0 with 1 remote versions
TRACE Found candidate for package pyyaml with range >=6.0.1, <6.1.dev0 after 1 steps: 6.0.3 version
TRACE Returning incompatible candidate for package pyyaml with range >=6.0.1, <6.1.dev0 after 1 steps
TRACE Selecting candidate for pydantic with range >=2.8.2 with 1 remote versions
TRACE Found candidate for package pydantic with range >=2.8.2 after 1 steps: 2.12.5 version
TRACE Returning candidate for package pydantic with range >=2.8.2 after 1 steps
TRACE Selecting candidate for pydantic-settings with range >=2.5.0, <3.0.0 with 1 remote versions
TRACE Found candidate for package pydantic-settings with range >=2.5.0, <3.0.0 after 1 steps: 2.12.0 version
TRACE Returning candidate for package pydantic-settings with range >=2.5.0, <3.0.0 after 1 steps
TRACE Selecting candidate for httpx with range >=0.28.1, <0.29.dev0 with 1 remote versions
TRACE Found candidate for package httpx with range >=0.28.1, <0.29.dev0 after 1 steps: 0.28.1 version
TRACE Returning candidate for package httpx with range >=0.28.1, <0.29.dev0 after 1 steps
TRACE Selecting candidate for gevent with range >=25.5.1, <25.6.dev0 with 1 remote versions
TRACE Found candidate for package gevent with range >=25.5.1, <25.6.dev0 after 1 steps: 25.5.1 version
TRACE Returning incompatible candidate for package gevent with range >=25.5.1, <25.6.dev0 after 1 steps
TRACE Selecting candidate for dpkt with range >=1.9.8, <1.10.dev0 with 1 remote versions
TRACE Found candidate for package dpkt with range >=1.9.8, <1.10.dev0 after 1 steps: 1.9.8 version
TRACE Returning candidate for package dpkt with range >=1.9.8, <1.10.dev0 after 1 steps
TRACE Selecting candidate for werkzeug with range >=3.1.4, <3.2.dev0 with 1 remote versions
TRACE Found candidate for package werkzeug with range >=3.1.4, <3.2.dev0 after 1 steps: 3.1.5 version
TRACE Returning candidate for package werkzeug with range >=3.1.4, <3.2.dev0 after 1 steps
TRACE Selecting candidate for flask with range >=3.0.3, <3.1.dev0 with 1 remote versions
TRACE Found candidate for package flask with range >=3.0.3, <3.1.dev0 after 1 steps: 3.0.3 version
TRACE Returning candidate for package flask with range >=3.0.3, <3.1.dev0 after 1 steps
TRACE Received built distribution metadata for: socksio==1.0.0
INFO add_decision: Id::(11) @ 1.0.0 without checking dependencies
TRACE Assigned packages: root==0a0.dev0, dify-plugin==0.7.1, socksio==1.0.0
TRACE Chose package for decision: flask. remaining choices: yarl, werkzeug, dpkt, gevent, httpx, pydantic-settings, pydantic, pyyaml, requests, packaging, tiktoken
DEBUG Searching for a compatible version of flask (>=3.0.3, <3.1.dev0)
TRACE Selecting candidate for flask with range >=3.0.3, <3.1.dev0 with 1 remote versions
TRACE Found candidate for package flask with range >=3.0.3, <3.1.dev0 after 1 steps: 3.0.3 version
TRACE Returning candidate for package flask with range >=3.0.3, <3.1.dev0 after 1 steps
DEBUG Selecting: flask==3.0.3 [compatible] (flask-3.0.3-py3-none-any.whl)
TRACE Received built distribution metadata for: packaging==26.0
TRACE Received built distribution metadata for: flask==3.0.3
DEBUG Adding transitive dependency for flask==3.0.3: werkzeug>=3.0.0
DEBUG Adding transitive dependency for flask==3.0.3: jinja2>=3.1.2
DEBUG Adding transitive dependency for flask==3.0.3: itsdangerous>=2.1.2
DEBUG Adding transitive dependency for flask==3.0.3: click>=8.1.3
DEBUG Adding transitive dependency for flask==3.0.3: blinker>=1.6.2
INFO add_decision: Id::(2) @ 3.0.3 without checking dependencies
TRACE Assigned packages: root==0a0.dev0, dify-plugin==0.7.1, socksio==1.0.0, flask==3.0.3
TRACE Chose package for decision: werkzeug. remaining choices: yarl, blinker, dpkt, gevent, httpx, pydantic-settings, pydantic, pyyaml, requests, packaging, tiktoken, jinja2, itsdangerous, click
TRACE Received built distribution metadata for: requests==2.32.5
DEBUG Searching for a compatible version of werkzeug (>=3.1.4, <3.2.dev0)
TRACE Selecting candidate for werkzeug with range >=3.1.4, <3.2.dev0 with 1 remote versions
TRACE Found candidate for package werkzeug with range >=3.1.4, <3.2.dev0 after 1 steps: 3.1.5 version
TRACE Returning candidate for package werkzeug with range >=3.1.4, <3.2.dev0 after 1 steps
DEBUG Selecting: werkzeug==3.1.5 [compatible] (werkzeug-3.1.5-py3-none-any.whl)
TRACE Received package metadata for: jinja2
TRACE Received package metadata for: itsdangerous
TRACE Received package metadata for: click
TRACE Received package metadata for: blinker
TRACE Selecting candidate for blinker with range >=1.6.2 with 1 remote versions
TRACE Found candidate for package blinker with range >=1.6.2 after 1 steps: 1.9.0 version
TRACE Returning candidate for package blinker with range >=1.6.2 after 1 steps
TRACE Selecting candidate for click with range >=8.1.3 with 1 remote versions
TRACE Found candidate for package click with range >=8.1.3 after 1 steps: 8.3.1 version
TRACE Returning candidate for package click with range >=8.1.3 after 1 steps
TRACE Selecting candidate for itsdangerous with range >=2.1.2 with 1 remote versions
TRACE Found candidate for package itsdangerous with range >=2.1.2 after 1 steps: 2.2.0 version
TRACE Returning candidate for package itsdangerous with range >=2.1.2 after 1 steps
TRACE Selecting candidate for jinja2 with range >=3.1.2 with 1 remote versions
TRACE Found candidate for package jinja2 with range >=3.1.2 after 1 steps: 3.1.6 version
TRACE Returning candidate for package jinja2 with range >=3.1.2 after 1 steps
TRACE Received built distribution metadata for: dpkt==1.9.8
TRACE Received built distribution metadata for: pydantic==2.12.5
TRACE Received built distribution metadata for: httpx==0.28.1
TRACE Received built distribution metadata for: pydantic-settings==2.12.0
TRACE Received built distribution metadata for: werkzeug==3.1.5
DEBUG Adding transitive dependency for werkzeug==3.1.5: markupsafe>=2.1.1
INFO add_decision: Id::(3) @ 3.1.5 without checking dependencies
TRACE Assigned packages: root==0a0.dev0, dify-plugin==0.7.1, socksio==1.0.0, flask==3.0.3, werkzeug==3.1.5
TRACE Chose package for decision: dpkt. remaining choices: yarl, blinker, markupsafe, gevent, httpx, pydantic-settings, pydantic, pyyaml, requests, packaging, tiktoken, jinja2, itsdangerous, click
DEBUG Searching for a compatible version of dpkt (>=1.9.8, <1.10.dev0)
TRACE Selecting candidate for dpkt with range >=1.9.8, <1.10.dev0 with 1 remote versions
TRACE Found candidate for package dpkt with range >=1.9.8, <1.10.dev0 after 1 steps: 1.9.8 version
TRACE Returning candidate for package dpkt with range >=1.9.8, <1.10.dev0 after 1 steps
DEBUG Selecting: dpkt==1.9.8 [compatible] (dpkt-1.9.8-py3-none-any.whl)
TRACE Received package metadata for: markupsafe
TRACE Selecting candidate for markupsafe with range >=2.1.1 with 1 remote versions
INFO add_decision: Id::(4) @ 1.9.8 without checking dependencies
TRACE Found candidate for package markupsafe with range >=2.1.1 after 1 steps: 3.0.3 version
TRACE Returning incompatible candidate for package markupsafe with range >=2.1.1 after 1 steps
TRACE Assigned packages: root==0a0.dev0, dify-plugin==0.7.1, socksio==1.0.0, flask==3.0.3, werkzeug==3.1.5, dpkt==1.9.8
TRACE Chose package for decision: gevent. remaining choices: yarl, blinker, markupsafe, click, httpx, pydantic-settings, pydantic, pyyaml, requests, packaging, tiktoken, jinja2, itsdangerous
DEBUG Searching for a compatible version of gevent (>=25.5.1, <25.6.dev0)
TRACE Selecting candidate for gevent with range >=25.5.1, <25.6.dev0 with 1 remote versions
TRACE Found candidate for package gevent with range >=25.5.1, <25.6.dev0 after 1 steps: 25.5.1 version
TRACE Returning incompatible candidate for package gevent with range >=25.5.1, <25.6.dev0 after 1 steps
TRACE Assigned packages: root==0a0.dev0, dify-plugin==0.7.1, socksio==1.0.0, flask==3.0.3, werkzeug==3.1.5, dpkt==1.9.8
TRACE Selecting candidate for gevent with range >25.5.1, <25.6.dev0 with 1 remote versions
TRACE Chose package for decision: gevent. remaining choices: yarl, blinker, markupsafe, click, httpx, pydantic-settings, pydantic, pyyaml, requests, packaging, tiktoken, jinja2, itsdangerous
TRACE Exhausted all candidates for package gevent with range >25.5.1, <25.6.dev0 after 0 steps
DEBUG Searching for a compatible version of gevent (>25.5.1, <25.6.dev0)
TRACE Selecting candidate for gevent with range >25.5.1, <25.6.dev0 with 1 remote versions
TRACE Exhausted all candidates for package gevent with range >25.5.1, <25.6.dev0 after 0 steps
DEBUG No compatible version found for: gevent
INFO Start conflict resolution because incompat satisfied:
gevent >25.5.1, <25.6.dev0 is forbidden
INFO backtrack to DecisionLevel(2)
INFO Start conflict resolution because incompat satisfied:
gevent ==25.5.1 is forbidden
INFO prior cause: gevent >=25.5.1, <25.6.dev0 is forbidden
INFO prior cause: dify-plugin ==0.7.1 is forbidden
INFO backtrack to DecisionLevel(1)
DEBUG Recording unit propagation conflict of gevent from incompatibility of (dify-plugin)
TRACE Assigned packages: root==0a0.dev0
TRACE Chose package for decision: dify-plugin. remaining choices: yarl, blinker, markupsafe, click, httpx, pydantic-settings, pydantic, pyyaml, requests, packaging, tiktoken, jinja2, itsdangerous
DEBUG Searching for a compatible version of dify-plugin (>0.7.1, <0.8.dev0)
TRACE Selecting candidate for dify-plugin with range >0.7.1, <0.8.dev0 with 1 remote versions
TRACE Exhausted all candidates for package dify-plugin with range >0.7.1, <0.8.dev0 after 0 steps
DEBUG No compatible version found for: dify-plugin
INFO Start conflict resolution because incompat satisfied:
dify-plugin >0.7.1, <0.8.dev0 is forbidden
INFO prior cause: dify-plugin >=0.7.1, <0.8.dev0 is forbidden
INFO prior cause: root ==0a0.dev0 is forbidden
TRACE Selecting candidate for dify-plugin with range >0.7.1, <0.8.dev0 with 1 remote versions
TRACE Exhausted all candidates for package dify-plugin with range >0.7.1, <0.8.dev0 after 0 steps
TRACE Received built distribution metadata for: click==8.3.1
TRACE Received built distribution metadata for: jinja2==3.1.6
TRACE Received built distribution metadata for: itsdangerous==2.2.0
TRACE Received built distribution metadata for: blinker==1.9.0
TRACE Resolver derivation tree before reduction
term root==0a0.dev0
root==0a0.dev0 depends on dify-plugin>=0.7.1, <0.8.dev0
term dify-plugin>=0.7.1, <0.8.dev0
term dify-plugin==0.7.1
dify-plugin==0.7.1 depends on gevent>=25.5.1, <25.6.dev0
term gevent>=25.5.1, <25.6.dev0
no versions of gevent>25.5.1, <25.6.dev0
gevent==25.5.1 no wheels with a matching Python ABI tag
no versions of dify-plugin>0.7.1, <0.8.dev0
TRACE Resolver derivation tree after reduction
term root==0a0.dev0
root==0a0.dev0 depends on dify-plugin==0.7.1
term dify-plugin==0.7.1
term dify-plugin==0.7.1
dify-plugin==0.7.1 depends on gevent==25.5.1
term gevent==25.5.1
no versions of gevent>25.5.1, <25.6.dev0
gevent==25.5.1 no wheels with a matching Python ABI tag
no versions of dify-plugin>0.7.1, <0.8.dev0
TRACE Selecting candidate for gevent with range ==25.5.1 with 1 remote versions
TRACE Found candidate for package gevent with range ==25.5.1 after 1 steps: 25.5.1 version
TRACE Returning incompatible candidate for package gevent with range ==25.5.1 after 1 steps
× No solution found when resolving dependencies:
?─? Because gevent==25.5.1 has no wheels with a matching Python ABI tag
(e.g., cp312) and only gevent==25.5.1 is available, we can conclude
that gevent==25.5.1 cannot be used.
And because dify-plugin==0.7.1 depends on gevent==25.5.1, we can
conclude that dify-plugin==0.7.1 cannot be used.
And because only dify-plugin==0.7.1 is available and you require
dify-plugin==0.7.1, we can conclude that your requirements are
unsatisfiable.```
hint: dify-plugin was requested with a pre-release marker (e.g.,
dify-plugin>0.7.1,<0.8.dev0), but pre-releases weren’t enabled (try:
--prerelease=allow)

hint: You require CPython 3.12 (cp312), but we only found wheels for
gevent (v25.5.1) with the following Python ABI tag: cp311

hint: gevent was requested with a pre-release marker (e.g.,
gevent>25.5.1,<25.6.dev0), but pre-releases weren’t enabled (try:
--prerelease=allow)


DEBUG Released lock at `/app/storage/cwd/langgenius/deepseek-0.0.9@eafbab2061d8f17d307120444f977117e4d937e90a02465548902db983e029f0/.venv/.lock`
DEBUG Released lock at `/root/.cache/uv/.lock`

failed to init environment

After unzipping the plugin package, add the specified library version gevent==25.5.1, then recreate the offline package. The plugin can now be installed successfully, but adding the API key failed with an error: req_id: 735c141c40 PluginInvokeError: {“args”:{},“error_type”:“UnboundLocalError”,“message”:“cannot access local variable ‘response’ where it is not associated with a value”}

What the heck :sweat_smile: