Debian11下安装supervisor 4.2.2后运行supervisorctl报错求助
- 环境:Debian 11,源码编译的Python3.11/3.10
- Supervisor版本:4.2.2-2,安装后运行
supervisorctl报错 - 已尝试操作:升级/降级PIP、单独安装python3 importlib包,均无效
报错1:运行supervisorctl时的包元数据缺失
Traceback (most recent call last):
File "/usr/local/lib/python3.11/importlib/metadata/init.py", line 563, in from_name
return next(cls.discover(name=name))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
StopIterationDuring handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/bin/supervisorctl", line 33, in
sys.exit(load_entry_point('supervisor==4.2.2', 'console_scripts', 'supervisorctl')())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/bin/supervisorctl", line 22, in importlib_load_entry_point
for entry_point in distribution(dist_name).entry_points
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/importlib/metadata/init.py", line 981, in distribution
return Distribution.from_name(distribution_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/importlib/metadata/init.py", line 565, in from_name
raise PackageNotFoundError(name)
importlib.metadata.PackageNotFoundError: No package metadata was found for supervisor
报错2:安装importlib-metadata时的PIP版本依赖问题
执行命令:
pip install importlib-metadata
报错:
File "/usr/local/lib/python3.11/site-packages/pip/_vendor/pkg_resources/init.py", line 786, in resolve
raise DistributionNotFound(req, requirers)
pip._vendor.pkg_resources.DistributionNotFound: The 'pip==20.3.4' distribution was not found and is required by the application
报错3:降级PIP后安装Supervisor的lsb_release命令失败
File "/usr/local/lib/python3.10/site-packages/pip/_vendor/distro.py", line 556, in get
ret = obj.dict[self._fname] = self._f(obj)
File "/usr/local/lib/python3.10/site-packages/pip/_vendor/distro.py", line 1014, in _lsb_release_info
stdout = subprocess.check_output(cmd, stderr=devnull)
File "/usr/local/lib/python3.10/subprocess.py", line 421, in check_output
return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
File "/usr/local/lib/python3.10/subprocess.py", line 526, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1.
1. 隔离源码编译的Python环境
Debian 11自带Python3.9,源码编译的Python会覆盖系统pip路径导致依赖混乱,编译时指定独立前缀:
# 以Python3.11为例 ./configure --prefix=/usr/local/python311 --enable-optimizations make && make install # 创建独立软链,避免覆盖系统命令 ln -s /usr/local/python311/bin/python3.11 /usr/local/bin/python311 ln -s /usr/local/python311/bin/pip3.11 /usr/local/bin/pip311
2. 修复lsb_release命令缺失问题
Debian最小化安装可能缺少相关包,先安装:
apt update && apt install -y lsb-release
3. 用虚拟环境安装Supervisor
使用编译的Python创建虚拟环境,彻底隔离依赖:
# 创建虚拟环境 python311 -m venv /opt/supervisor-venv # 激活虚拟环境 source /opt/supervisor-venv/bin/activate # 升级pip并安装指定版本Supervisor pip install --upgrade pip pip install supervisor==4.2.2
- 若需全局调用,可创建软链:
ln -s /opt/supervisor-venv/bin/supervisord /usr/local/bin/supervisord ln -s /opt/supervisor-venv/bin/supervisorctl /usr/local/bin/supervisorctl
4. 清理冲突的系统包
如果之前用系统包管理安装过Supervisor,先彻底卸载:
apt remove --purge supervisor
内容的提问来源于stack exchange,提问作者Alexandru R

