fix: cv2 空壳修复改 pip --force-reinstall——手动 wheel 解压兜底在部分环境修不好(解压后 import cv2 仍无 __version__,OCR 持续不可用);force-reinstall 已在 220 实测恢复 cv2 4.14.0
This commit is contained in:
+12
-16
@@ -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)),跳过安装"
|
||||
|
||||
Reference in New Issue
Block a user