CSMS 实现中的循环导入错误
Posted
技术标签:
【中文标题】CSMS 实现中的循环导入错误【英文标题】:Circular import error in CSMS implementation 【发布时间】:2022-01-17 15:30:09 【问题描述】:我正在为 python 中无限数量的 Charge Points 构建一个 CSMS,我面临一个循环导入问题。
我的项目主要分为运行服务器脚本(server.py)和几个模块,分别对应不同类型的Charge Points。我有 3 种不同类型的充电点对象,这是因为根据安装和客户要求,每个充电点的方法、变量和行为都不同。 在其中一种情况下,我需要调用一个函数,该函数使用模块 (business_cp.py) 中的对象方法内部的已连接充电点队列。这个队列(包含所有类型的 Charge Points 对象)是另一个 CentralSystem 类型对象的属性,它在另一个模块中定义。
我的方法是将此对象设为全局并将其导入模块 business_cp.py。但我面临一个循环导入错误:
Traceback (most recent call last):
File "c:\Users\sydea\Desktop\Cargadores solares\Proyecto\OCPP-1.6J-CS-I\server.py", line 15, in <module>
from lib.business_cp import BusinessChargePoint, business_load_balancing, ACTIVE_CHARGING_SESSION_CHARGERS, BUSINESS_INSTALATION_METER_VALUES
File "c:\Users\sydea\Desktop\Cargadores solares\Proyecto\OCPP-1.6J-CS-I\lib\business_cp.py", line 18, in <module>
from server import CSMS
File "c:\Users\sydea\Desktop\Cargadores solares\Proyecto\OCPP-1.6J-CS-I\server.py", line 15, in <module>
from lib.business_cp import BusinessChargePoint, business_load_balancing, ACTIVE_CHARGING_SESSION_CHARGERS, BUSINESS_INSTALATION_METER_VALUES
ImportError: cannot import name 'BusinessChargePoint' from partially initialized module 'lib.business_cp' (most likely due to a circular import) (c:\Users\sydea\Desktop\Cargadores solares\Proyecto\OCPP-1.6J-CS-I\lib\business_cp.py)
请注意,我还将一些变量和函数从 business_cp.py 导入到 server.py 中
在 server.py 中导入并创建 CSMS
from lib.business_cp import BusinessChargePoint, business_load_balancing, ACTIVE_CHARGING_SESSION_CHARGERS, BUSINESS_INSTALATION_METER_VALUES
# GLOBAL VARIABLES
CSMS = None
(主内)
global CSMS
CSMS = CentralSystem()
在 business_cp.py 中导入
from server import CSMS
我该如何解决这个问题?有没有比使 CSMS 对象全局化更好的方法?
感谢您的帮助!
【问题讨论】:
【参考方案1】:现在我已经通过从 business_cp.py 导入变量和函数来解决这个问题,如下所示:
import lib.business_cp as bcp
然后调用这些变量,例如:bcp.variable
。但是我仍然认为这不是正确的方法(谈论使 CSMS 对象全局化)。
【讨论】:
以上是关于CSMS 实现中的循环导入错误的主要内容,如果未能解决你的问题,请参考以下文章
excel导入时提示java.lang.ClassCastException错误