一个同事给我发送了一个脚本,它像这样开始:
from ourlibA import *
from ourlibB import *
import random
import time
from datetime import datetime
print datetime.now()
当我这样调用脚本时,它可以很好地工作。
但是我正在使用pycharm,在进行了一些编辑之后,我还使用了其“组织导入”功能,该功能将导入转换为:
import random
import time
from datetime import datetime
from ourlibA import *
from ourlibB import *
print datetime.now()
当我现在运行更改后的脚本时,最终得到:
打印datetime.now()
AttributeError:“模块”对象没有属性“现在”
现在我很困惑,导致了以下问题:
datetime
的导入仍然存在,那么该错误从哪里来?我知道这不是完整的mcve,但是这些私有库既庞大又私有。我更多地询问如何在python中解决这种“导入顺序”问题。
(我正在使用python 2.7.17)
答案 0 :(得分:0)
我采取了一种“强力”方法,并简单地(递归地)手动查看了私有库的导入语句,以找出可以做到的
import datetime
因此:当该库最后一次导入时,它与前面的from datetime import datetime
语句冲突。
通过更改客户端脚本,两个“快速解决方案”(更多:肮脏的黑客)起作用:
from datetime import datetime
print datetime.datetime.now()
“更好”的解决方案:退后一步,摆脱两个from X import *
通配符语句。识别所有所需的特定名称需要花费一些时间,但是绝对值得花时间。