在scikit-image中导入相对/绝对函数时出现问题

bey*_*int 8 python scikit-image

我正在尝试为scikit-image 提交PR,但我收到Travis-CI 错误:

  Traceback (most recent call last):
  File "doc/examples/edges/plot_canny.py", line 22, in <module>
    from skimage import feature
  File "/home/travis/build/scikit-image/scikit-image/skimage/feature/__init__.py", line 9, in <module>
    from .peak import peak_local_max
  File "/home/travis/build/scikit-image/scikit-image/skimage/feature/peak.py", line 3, in <module>
    from ..filters import rank_order
  File "/home/travis/build/scikit-image/scikit-image/skimage/filters/__init__.py", line 11, in <module>
    from ._frangi import frangi_filter, hessian_filter
  File "/home/travis/build/scikit-image/scikit-image/skimage/filters/_frangi.py", line 2, in <module>
    from skimage.feature import hessian_matrix, hessian_matrix_eigvals
ImportError: cannot import name hessian_matrix
Run Code Online (Sandbox Code Playgroud)

我想这可能是一个循环导入错误,但我不知道如何解决这个问题.我已经包含 frangi_filterhessian_filter进入过滤器的模块__init__.py.

我也尝试了相对导入,导致了同样的错误.

如何正确导入,以便解决循环导入问题?

Art*_*lev 6

解决这个问题的一个丑陋的黑客就是在函数中移动导入,比如

def hessian_filter(image, scale=(1, 10), scale_ratio=2, beta1=0.5, beta2=15):
    """
       Blah-blah-blah
    """
    from ..feature import hessian_matrix, hessian_matrix_eigvals
    # function body
Run Code Online (Sandbox Code Playgroud)

您可能希望创建单独的"代理"功能,hessian_matrix并且hessian_matrix_eigvals不会使用导入污染每个功能.