Python 模块是可以循环依赖的,但是必须避免循环实例化。
问题:
Traceback (most recent call last): File "/export/BioToolWeb/main.py", line 10, in <module> from modules.tool import views as tool File "/export/BioToolWeb/modules/tool/views.py", line 12, in <module> from modules.tool.utils import get_cmd_args, STATUS, STATUS_DES, READ_SIZE, BULK_PIPLINE, BULK_DEFAULT_ARGS, start_pipline, exec_next_tool File "/export/BioToolWeb/modules/tool/utils.py", line 5, in <module> from modules.tool.dboxmr_helper import exec_cmd File "/export/BioToolWeb/modules/tool/dboxmr_helper.py", line 6, in <module> from modules.tool.utils import STATUS ImportError: cannot import name 'STATUS' from partially initialized module 'modules.tool.utils' (most likely due to a circular import) (/export/BioToolWeb/modules/tool/utils.py)
代码
modules/tool/utils.py
import multiprocessing from datetime import datetime from modules import biopg import json from modules.tool.dboxmr_helper import exec_cmd from utils import LOG STATUS = { 'finished':0, 'analyzing':1, 'error':2, 'pause':3} STATUS_DES = {v:k for k,v in STATUS.items()} BULK_PIPLINE = ['Trim_galore', 'Hisat2', 'StringTie']
modules/tool/dboxmr_helper.py
import requests from datetime import datetime import dboxmr from settings import TOOL_LOGS, DBOXMR_SVC, WEB_PORT from utils import LOG from modules.tool.utils import STATUS
分析:
在utils.py中的内容还没实例化完(如STATUS还没被实例化),dboxmr_helper.py就开始import了
解决:修改utils.py
import multiprocessing from datetime import datetime from modules import biopg import json from utils import LOG STATUS = { 'finished':0, 'analyzing':1, 'error':2, 'pause':3} from modules.tool.dboxmr_helper import exec_cmd #调整这句话的位置 STATUS_DES = {v:k for k,v in STATUS.items()} BULK_PIPLINE = ['Trim_galore', 'Hisat2', 'StringTie']