You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用skimage进行圆形检测时遭遇循环导入错误的排查求助

问题

尝试使用skimage运行基础圆形检测功能时出现循环导入错误,使用的代码导入模块如下:

import cv2
import numpy as np
from skimage.feature import peak_local_max
from skimage.segmentation import watershed
from scipy import ndimage

运行时触发以下报错:

File "C:\Users\myfile\circle_recognition.py", line 7, in <module>
    from skimage.feature import peak_local_max
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\skimage\feature\__init__.py", line 4, in <module>
    from ._cascade import Cascade
  File "skimage/feature/_cascade.pyx", line 20, in init skimage.feature._cascade
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\skimage\transform\__init__.py", line 4, in <module>
    from .radon_transform import (radon, iradon, iradon_sart,
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\skimage\transform\radon_transform.py", line 6, in <module>
    from ._warps import warp
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\skimage\transform\_warps.py", line 9, in <module>
    from ..measure import block_reduce
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\skimage\measure\__init__.py", line 6, in <module>
    from ._polygon import approximate_polygon, subdivide_polygon
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\skimage\measure\_polygon.py", line 2, in <module>
    from scipy import signal
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\__init__.py", line 211, in __getattr__
    return _importlib.import_module(f'scipy.{name}')
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\signal\__init__.py", line 323, in <module>
    from ._filter_design import *
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\signal\_filter_design.py", line 16, in <module>
    from scipy import special, optimize, fft as sp_fft
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\__init__.py", line 211, in __getattr__
    return _importlib.import_module(f'scipy.{name}')
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\optimize\__init__.py", line 401, in <module>
    from ._minimize import *
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\optimize\_minimize.py", line 26, in <module>
    from ._trustregion_constr import _minimize_trustregion_constr
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\optimize\_trustregion_constr\__init__.py", line 4, in <module>
    from .minimize_trustregion_constr import _minimize_trustregion_constr
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\optimize\_trustregion_constr\minimize_trustregion_constr.py", line 5, in <module>
    from .._constraints import (
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\optimize\_constraints.py", line 8, in <module>
    from numpy.testing import suppress_warnings
  File "C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\numpy\testing\__init__.py", line 8, in <module>
    from unittest import TestCase
ImportError: cannot import name 'peak_local_max' from partially initialized module 'skimage.feature' (most likely due to a circular import) (C:\Users\me\AppData\Local\Programs\Python\Python310\lib\site-packages\skimage\feature\__init__.py)

问题原因与解决方法

问题根源

这个循环导入错误并非缺少依赖,而是scipy、numpy与scikit-image版本不兼容导致的模块加载冲突。从报错链能看到,scipy在导入过程中触发了numpy.testing的导入,而这又反过来影响了skimage模块的初始化流程,最终导致peak_local_max无法正常导入。

修复步骤

  • 统一依赖版本
    卸载现有冲突版本,安装经过验证的兼容组合:

    pip uninstall -y scipy numpy scikit-image opencv-python
    pip install numpy==1.23.5 scipy==1.9.3 scikit-image==0.20.0 opencv-python==4.8.0.76
    

    该版本组合在Python 3.10环境下能稳定运行目标代码。

  • 调整导入顺序(可选)
    优先导入基础库再导入skimage模块,避免加载时的依赖链混乱:

    import numpy as np
    import cv2
    from scipy import ndimage
    from skimage.feature import peak_local_max
    from skimage.segmentation import watershed
    
  • 验证安装
    运行以下代码确认所有模块能正常导入:

    import cv2
    import numpy as np
    from skimage.feature import peak_local_max
    from skimage.segmentation import watershed
    from scipy import ndimage
    print("所有模块导入成功")
    

内容的提问来源于stack exchange,提问作者Farm Éva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:15:44