【python学习笔记】模块导入的搜索路径顺序是什么?

搜索顺序应该是:
主目录 -》PYTHONPATH环境变量 -》标准库 -》.pth文件指定的内容
所以如果主目录里有一个自定义的模块文件文件,应该会先加载,然后后面标准库的模块文件可能就不会加载了,也就是隐藏了。

还是实验一下:
创建一个sys.py在主目录下,以下是在windows的py3.5上实验的,sys.py内容:

# filename sys.py in current working directory
def func():
    print('This is my own sys.py')

func()

这样按理说在cmd中运行python然后import sys,会打印一句:

This is my own sys.py

但事实上并不会,还是加载了built-in的sys,直接输入sys能看到:

>>> sys
<module 'sys' (built-in)>

既然是sys是内置的,试试os,同样的方法,一样的结果:

>>> os
<module 'os' from 'C:\\Program Files\\Python35\\lib\\os.py'>

因为os在标准库里面,应该是当前目录下的os.py会覆盖了(隐藏了)库里的os模块才对。最后试一下__future__,才是可以的:

>>> import __future__
this is my __future__

这是为什么?我想应该是在运行python命令时,os作为一些初始化工作时被导入了,所以其实再手动import os,根本没有重载。如何证明呢?我看到python手册里有说,site.py在初始化的时候会自动运行,所以先看看他的内容,确实有:

import sys
import os

其实更简单的可以通过sys模块去查看:

\> python
>>> import sys
>>> 'os' in list(sys.modules.keys())
True

那么我在这两句之前加一句,并保存退出:

import __future__

退出cmd中的python,重新运行python命令,再导入试试:

>>> import __future__

这次就不会输出:this is my __future__,即使我在当前目录定义了这个__future__.py,所以说的确是已经加载过了。

说明:以上心得若有不足、错误之处欢迎各位指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值