循环依赖
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']
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)