循环依赖

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']

 

posted on 2022-07-08 18:02  我和你并没有不同  阅读(52)  评论(0编辑  收藏  举报