众所周知:
如果模块名称冲突, 当前目录的模块优先于标准库导入. 因为 sys.path 中当前目录在最前面.
但实际上这是错误的.
案例:
自定义了一个模块 site.py
在当前目录的另一个 py 文件 导入该模块 ( import site ), 发现导入失败 (但是没有报错), 因为导入的是同名的标准库.
原因:
实际上, Python3 中有些特殊的库, 即使本地目录中有同名文件, 在导入时也不会被覆盖.
比如 site, sys, os, builtins 等.
原因是: 一些 内建模块(built-in) 以及 和Python运行时相关 的库名不会被覆盖.
解决方案:
- 可以修改自定义模块的名字 ( 常规操作 )
- 或者是新建一个不存在名称冲突的文件夹, 将这个文件夹设置成包, 把名称冲突的模块放到包里, 通过包来导入, 导入后再通过 as 重命名
下面这种做法就可以覆盖内置的重名模块了:
import packagename.site as site