__import__函数的from_list参数是否区分大小写?动态导入疑问
问题解答
- 首先明确:
__import__本身没有大小写不敏感的特性,你现在导入成功是正常操作,并非异常的“大小写不敏感”情况。 - 模块导入的大小写敏感性由操作系统的文件系统决定:
- 像Windows的NTFS、macOS默认的APFS这类文件系统,会忽略文件名的大小写差异,哪怕导入时写错大小写也可能成功;
- 但在Linux的ext4这类大小写敏感的文件系统上,模块名必须和文件名严格匹配大小写,否则直接报
ImportError。
- 你的代码里,文件名本身就是小写,导入时用的
filename_wout_ext是从文件名提取的小写字符串,属于严格匹配,所以导入成功是理所当然的,不存在操作错误。
另外关于必须指定from_list参数的问题:
__import__的from_list参数不为空时,会返回你指定的子模块(比如src.packages.a),而不是顶层的src模块;- 只有拿到对应的子模块,后续用
inspect.getmembers才能正确提取到模块里的类,所以这部分是必要操作,没有问题。
内容的提问来源于stack exchange,提问作者Mavibirdesmi
相关产品推荐
相关产品推荐

