深扒Python是如何找到模块的?
诗书塞外 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置为空列表, 是不是就什么包都找不到了呢?(去试试>>>)
不过不必在意这个例子, 实际业界实践中你永远也不用这么做. 下面这段代码才是你最常用的:
除了设置sys.path, 还有一种改变搜索路径的常用办法, 那就是PYTHONPATH. PYTHONPATH是一个环境变量, 通常我们使用这个句子来改变它
PYTHONPATH为程序的部署提供了更好的灵活性, 你会发现, 几乎所有的Python部署工具, Python程序监控工具都使用PYTHONPATH来配置搜索路径.
聪明的你可能还想到了*我们前面讲的.pth文件. **对, 创建一个.pth文件, 放置到默认路径里, 同样可以达到增加搜索路径的目的. 不过, 这很不常用. 向系统中注入自己的代码不是一个好的实践, 除非你本身就是开发系统, 或者中间件的程序员.
到此, 你对于Python如何搜索需要的包已经有足够的了解了, 可以向更高的山峰攀登~(≧▽≦)/~啦啦啦
精彩评论