在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如何搜索需要的包已经有足够的了解了, 可以向更高的山峰攀登(≧▽≦)/啦啦啦