深扒Python是如何找到模块的
深扒Python是如何找到模块的在Python代码中,文件的一开始几乎无一例外地是
一大堆的import.语义很好理解,这是引用了这个文件需要的依赖.但是大家有没有想过,Python是如何找到这些被引用的包的呢?这些被引用的包又实际上放置在哪里呢?
对于Python在哪里找到需要引用的包,事实上Python提供了一个接口,来获得Python查找路径的列表.示例如下(去试试>>>)
运行这几行代码,小编得到如下的结果.
对于这个结果,小编把它们分为几类来讲解
第一类,很显然,这些路径是Python安装时内置进去的.
第二类,都是放在第一类的路径中,但是一眼就能看出它们其实都不是Python自带的东西,而是后安装进去的.
这类路径能够让Python纳入搜索的范围,要归功于一种特殊的文件,*.pth文件.Python在搜索模块的过程中,如果遇到了*.pth文件,则将*.pth文件中所罗列的路径也纳入到搜索路径中来.下面是一个*.pth文件的示例
其中首行和尾行的代码是什么含义,小编也没有深究过,大家有兴趣可以研究下,如果愿意和小编讨论就更好了^_^.小编可以确定的是那两行代码完全可以没有,可以直接罗列路径就行了,绝对路径相对路径都可以.甚至可以简单地只有一行.
第三类,就是当前路径.这里小编的当前路径是'/home/cliu/test'.Python搜索包的顺序是按照sys.path输出的列表的顺序进行的,并且搜索到第一个匹配的包即停止.所以可以看出,当前路径是第一个搜索的路径,当前路径中的包具有覆盖所有其他包的能力.如果你在当前路径下放置了一个datetime.py,那么你的标准库datetime模块就不能用了(⊙o⊙)哇,所以起名字一定要谨慎,不要与系统中其他的包重名.这一点小编是有着深刻教训的...(此处让我一个人静静)
讲完了Python搜索路径的规则,接下来我们讲讲如何改变这个规则.(与天斗,与地斗,与阶级敌人斗)
哈哈,这太简单了.既然搜索路径存放在sys.path,那我们就改变这个变量就好了.对于Python这样的动态语言,并没有什么只读这回事.
我们来验证一下,把sys.path置为空列表,是不是就什么包都找不到了呢?(去试试>>>)
看起来并不是这样,标准库还是找得到的,第三方库确实统统找不到了.(果然官方还是要吃小炤的)
不过不必在意这个例子,实际业界实践中你永远也不用这么做.下面这段代码才是你最常用的:
这段代码经常被用在Python脚本的最开始,用来设置脚本需要引用的包的查找位置.
除了设置sys.path,还有一种改变搜索路径的常用办法,那就是PYTHONPATH.PYTHONPATH是一个环境变量,通常我们使用这个句子来改变它
当然,你也可以把自己的搜索路径放在前面.
PYTHONPATH为程序的部署提供了更好的灵活性,你会发现,几乎所有的Python部署工具,Python程序监控工具都使用PYTHONPATH来配置搜索路径.
聪明的你可能还想到了我们前面讲的*.pth文件.对,创建一个.pth文件,放置到默认路径里,同样可以达到增加搜索路径的目的.不过,这很不常用.向系统中注入自己的代码不是一个好的实践,除非你本身就是开发系统,或者中间件的程序员.
到此,你对于Python如何搜索需要的包已经有足够的了解了,可以向更高的山峰攀登.
Python培训、Python培训班、Python培训机构,就选光环大数据!
还不够过瘾?想学习更多?点击 http://hadoop.aura.cn/python/ 进行Python学习!
大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请专业的大数据领域知名讲师,确保教学的整体质量与教学水准。讲师团及时掌握时代潮流技术,将前沿技能融入教学中,确保学生所学知识顺应时代所需。通过深入浅出、通俗易懂的教学方式,指导学生更快的掌握技能知识,成就上万个高薪就业学子。 更多问题咨询,欢迎点击------>>>>在线客服!