次の循環インポートのケースがありました(ここでは大幅に簡略化されています)。
array2image.py
変換モジュール:
import tuti
@tuti.log_exec_time # can't do that, evaluated at definition time
def convert(arr):
'''Convert array to image.'''
return image.fromarray(arr)
tuti.py
utilsモジュールのテスト:
import array2image
def log_exec_time(f):
'''A small decorator not using array2image'''
def debug_image(arr):
image = array2image.convert(arr)
image = write('somewhere')
NameErrorで失敗しました。そこには循環依存が実際にはなかったので、これは私には正しく見えませんでした。私はそれや説明を避けるためのきちんとした方法を探していました...そしてこの質問を書く途中で私はそれを見つけました。
import
でデコレータの下を移動すると、 tuti.py
NameErrorが解決されます。
def log_exec_time(f):
'''A small decorator not using array2image'''
import array2image
def debug_image(arr):
image = array2image.convert(arr)
image = write('somewhere')