From 4863b9fbbeaacd5871ca4636ee707dbf3809eade Mon Sep 17 00:00:00 2001 From: butubb <1422726308@qq.com> Date: Fri, 4 Sep 2026 16:25:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20cv2=20=E7=A9=BA=E5=A3=B3=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=94=B9=20pip=20--force-reinstall=E2=80=94=E2=80=94?= =?UTF-8?q?=E6=89=8B=E5=8A=A8=20wheel=20=E8=A7=A3=E5=8E=8B=E5=85=9C?= =?UTF-8?q?=E5=BA=95=E5=9C=A8=E9=83=A8=E5=88=86=E7=8E=AF=E5=A2=83=E4=BF=AE?= =?UTF-8?q?=E4=B8=8D=E5=A5=BD=EF=BC=88=E8=A7=A3=E5=8E=8B=E5=90=8E=20import?= =?UTF-8?q?=20cv2=20=E4=BB=8D=E6=97=A0=20=5F=5Fversion=5F=5F=EF=BC=8COCR?= =?UTF-8?q?=20=E6=8C=81=E7=BB=AD=E4=B8=8D=E5=8F=AF=E7=94=A8=EF=BC=89?= =?UTF-8?q?=EF=BC=9Bforce-reinstall=20=E5=B7=B2=E5=9C=A8=20220=20=E5=AE=9E?= =?UTF-8?q?=E6=B5=8B=E6=81=A2=E5=A4=8D=20cv2=204.14.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/start.sh | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/scripts/start.sh b/scripts/start.sh index 51d674b..33a5a6c 100755 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -35,10 +35,12 @@ if [ $? -ne 0 ]; then pip uninstall -y -q opencv-python 2>/dev/null || true pip install -q -i https://pypi.tuna.tsinghua.edu.cn/simple "opencv-python-headless>=4.8,<5" # 5.x wheel 无 cv2 模块,锁定 4.x - # pip 24.0 解压 abi3 wheel 偶发丢根文件(4.14.0.94 实测 site-packages/cv2 只剩子目录, - # cv2.abi3.so / __init__.py 缺失 → import cv2 成空壳,OCR 全挂)→ 空壳检测 + wheel 手动解压兜底(幂等) + # pip 24.0 解压 abi3 wheel 偶发丢根文件(site-packages/cv2 只剩子目录, + # cv2.abi3.so / __init__.py 缺失 → import cv2 成空壳,OCR 全挂)。 + # 手动解压兜底在部分环境修不好(解压后仍无 cv2.__version__), + # 实测 pip --force-reinstall 完整安装有效(220 验证 cv2 4.14.0 恢复)。 python3 - <<'PY' -import glob, os, shutil, site, subprocess, sys, zipfile +import subprocess, sys def cv2_ok(): try: @@ -49,20 +51,14 @@ def cv2_ok(): if cv2_ok(): sys.exit(0) -print("cv2 空壳,wheel 手动解压修复...") -r = subprocess.run(["pip", "download", "--no-deps", "-q", +print("cv2 异常,pip 强制重装 opencv-python-headless...") +r = subprocess.run(["pip", "install", "--force-reinstall", "-q", "-i", "https://pypi.tuna.tsinghua.edu.cn/simple", - "-d", "/tmp/ocv", "opencv-python-headless>=4.8,<5"], capture_output=True) -if r.returncode != 0: - sys.exit(1) -w = sorted(glob.glob("/tmp/ocv/opencv_python_headless*.whl"))[-1] -with zipfile.ZipFile(w) as z: - z.extractall("/tmp/ocv") -dst = os.path.join(site.getsitepackages()[0], "cv2") -shutil.rmtree(dst, ignore_errors=True) -shutil.copytree("/tmp/ocv/cv2", dst) -import cv2 -print(f"cv2 {cv2.__version__} 手动解压修复完成") + "opencv-python-headless>=4.8,<5"]) +if r.returncode == 0: + import cv2 + print(f"cv2 {cv2.__version__} 重装修复完成") +sys.exit(r.returncode) PY else echo "[start] 依赖已就绪(cv2 $(python3 -c 'import cv2; print(cv2.__version__)' 2>/dev/null)),跳过安装"