Self Checks
Dify version
1.13.3
Cloud or Self Hosted
Self Hosted (Docker)
Steps to reproduce
Summary
The openai-api-compatible plugin package version 0.0.53 appears to contain hardcoded external package URLs (for example https://files.pythonhosted.org/...) inside the packaged dependency metadata / lock file.
Because of this, plugin installation in Dify does not fully respect the configured private PyPI proxy and fails in offline or air-gapped environments, even when PIP_INDEX_URL / UV_INDEX_URL are correctly configured and working.
Environment
- Dify version:
1.13.3
- Deployment: Kubernetes
- Plugin:
openai-api-compatible
- Upgrade path:
0.0.37 -> 0.0.53
- Environment type: air-gapped / no direct internet access
- Private PyPI proxy is available and reachable from the cluster
Configured in plugin-daemon:
PIP_INDEX_URL=http://<private-pypi-proxy>/repository/pypi-proxy/simple
PIP_TRUSTED_HOST=<private-pypi-proxy-host>
UV_INDEX_URL=http://<private-pypi-proxy>/repository/pypi-proxy/simple
UV_INDEX_STRATEGY=unsafe-best-match
Problem
Installing or upgrading the plugin from the Dify UI fails with errors similar to:
failed to launch plugin: failed to install dependencies: failed to install dependencies: exit status 1, output:
...
error sending request for url
(https://files.pythonhosted.org/packages/.../gevent-26.5.0-cp312-cp312-manylinux_2_28_x86_64.whl)
client error (Connect)
operation timed out
...
We observed the same pattern for other packages as well, such as:
blinker
zope-interface
gevent
Important findings
- The private PyPI proxy is reachable from the
plugin-daemon pod.
- The environment variables are correctly present inside the
plugin-daemon container.
- Manual installation from inside the same pod works fine through the private proxy:
uv pip install --system -vvv "blinker==1.9.0"
uv pip install --system -vvv "zope-interface==8.4"
uv pip install --system -vvv greenlet
uv pip install --system -vvv "gevent==26.5.0"
All of the above succeeded.
- However, during plugin installation from the Dify UI, the logs still show many direct requests to:
https://files.pythonhosted.org/...
- After inspecting the unpacked plugin content, we found many references to
files.pythonhosted.org inside the packaged plugin files.
This strongly suggests that the packaged plugin includes a lock file or dependency metadata with direct artifact URLs, causing uv to fetch wheels from files.pythonhosted.org directly instead of resolving everything through the configured private package index.
Regression note
- Version
0.0.37 worked in our environment.
- Version
0.0.53 fails and contains direct external URLs.
So this appears to be a regression introduced somewhere between 0.0.37 and 0.0.53.
Suspected root cause
Most likely the plugin package contains one of the following:
uv.lock
- another lock file
- dependency metadata with direct wheel URLs
These direct URLs point to files.pythonhosted.org, which bypasses private package indexes and breaks offline installs.
Suggested fix
Please publish the plugin package in an offline-friendly way:
- Do not ship a
uv.lock (or other lock file) with direct external artifact URLs, or
- Generate the lock/package metadata in a way that does not embed
files.pythonhosted.org URLs, or
- Ensure plugin installation resolves dependencies strictly through the configured package index instead of direct wheel URLs.
Why this matters
This makes the plugin impossible to install in enterprise / air-gapped / restricted-network deployments of Dify, even though a valid internal PyPI proxy is available and functional.
Workaround we are testing
Removing uv.lock from the packaged .difypkg may allow dependency resolution via the private index, but this is only a workaround and not a proper upstream fix.
If needed, I can also provide:
- example failing logs
- exact grep results showing
files.pythonhosted.org inside the unpacked plugin package
- Kubernetes/Dify deployment details
✔️ Expected Behavior
The plugin package should be installable in offline / air-gapped / proxied environments as long as Dify's Python package resolver is configured with a private PyPI index.
In particular, the packaged plugin should not force direct downloads from files.pythonhosted.org.
❌ Actual Behavior
Even with a working private PyPI proxy and valid PIP_INDEX_URL / UV_INDEX_URL, plugin installation still attempts to download wheel files directly from files.pythonhosted.org, which fails in offline environments.
Self Checks
Dify version
1.13.3
Cloud or Self Hosted
Self Hosted (Docker)
Steps to reproduce
Summary
The
openai-api-compatibleplugin package version0.0.53appears to contain hardcoded external package URLs (for examplehttps://files.pythonhosted.org/...) inside the packaged dependency metadata / lock file.Because of this, plugin installation in Dify does not fully respect the configured private PyPI proxy and fails in offline or air-gapped environments, even when
PIP_INDEX_URL/UV_INDEX_URLare correctly configured and working.Environment
1.13.3openai-api-compatible0.0.37->0.0.53Configured in
plugin-daemon:PIP_INDEX_URL=http://<private-pypi-proxy>/repository/pypi-proxy/simplePIP_TRUSTED_HOST=<private-pypi-proxy-host>UV_INDEX_URL=http://<private-pypi-proxy>/repository/pypi-proxy/simpleUV_INDEX_STRATEGY=unsafe-best-matchProblem
Installing or upgrading the plugin from the Dify UI fails with errors similar to:
We observed the same pattern for other packages as well, such as:
blinkerzope-interfacegeventImportant findings
plugin-daemonpod.plugin-daemoncontainer.All of the above succeeded.
https://files.pythonhosted.org/...files.pythonhosted.orginside the packaged plugin files.This strongly suggests that the packaged plugin includes a lock file or dependency metadata with direct artifact URLs, causing
uvto fetch wheels fromfiles.pythonhosted.orgdirectly instead of resolving everything through the configured private package index.Regression note
0.0.37worked in our environment.0.0.53fails and contains direct external URLs.So this appears to be a regression introduced somewhere between
0.0.37and0.0.53.Suspected root cause
Most likely the plugin package contains one of the following:
uv.lockThese direct URLs point to
files.pythonhosted.org, which bypasses private package indexes and breaks offline installs.Suggested fix
Please publish the plugin package in an offline-friendly way:
uv.lock(or other lock file) with direct external artifact URLs, orfiles.pythonhosted.orgURLs, orWhy this matters
This makes the plugin impossible to install in enterprise / air-gapped / restricted-network deployments of Dify, even though a valid internal PyPI proxy is available and functional.
Workaround we are testing
Removing
uv.lockfrom the packaged.difypkgmay allow dependency resolution via the private index, but this is only a workaround and not a proper upstream fix.If needed, I can also provide:
files.pythonhosted.orginside the unpacked plugin package✔️ Expected Behavior
The plugin package should be installable in offline / air-gapped / proxied environments as long as Dify's Python package resolver is configured with a private PyPI index.
In particular, the packaged plugin should not force direct downloads from
files.pythonhosted.org.❌ Actual Behavior
Even with a working private PyPI proxy and valid
PIP_INDEX_URL/UV_INDEX_URL, plugin installation still attempts to download wheel files directly fromfiles.pythonhosted.org, which fails in offline environments.