关于isort在目录从test重命名为tests后导入排序差异的咨询
关于isort在目录从test重命名为tests后导入排序差异的咨询
嗨,这个问题我之前踩过坑,其实核心原因和isort的导入分组规则,以及Python标准库的命名冲突有关!
先给你理清楚isort默认的导入排序逻辑,它会把导入分成几个优先级组,顺序大概是:
- 未来语句导入(比如
from __future__ import print_function) - Python标准库自带的模块/包导入
- 第三方库导入(像你用pip安装的numpy这类)
- 你自己项目内部的第一方模块/包导入
再对应看你的两种场景:
a目录下的
test包场景:
Python标准库本身就有一个名为test的内置包(是Python官方测试套件的一部分),isort默认会把名为test的导入识别成标准库导入。而numpy属于第三方库,按照优先级,标准库导入要排在第三方库前面,所以from test.asdasd import hello就被放在了import numpy as np的上面。b目录下的
tests包场景:tests这个名字并不是Python标准库中的模块/包,isort会自动检测出这是你自己项目里的第一方导入,按照规则,第一方导入的优先级低于第三方库,所以from tests.asdasd import hello就被排在了import numpy as np的下面。
如果想让isort把你的test包识别成项目内部的第一方导入,和tests保持一致的排序,可以在项目根目录创建一个.isort.cfg配置文件,内容如下:
[settings] known_first_party = test
这样isort就会把test相关的导入归到第一方组里,排序就会和tests的情况一样,排在numpy后面了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

