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'
代码
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
分析:
在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']