美文网首页
sys.path总结

sys.path总结

作者: __XY__ | 来源:发表于2017-09-10 19:30 被阅读0次

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

相关文章

  • sys.path总结

    在Python代码中, 文件的一开始几乎无一例外地是 第二类, 都是放在第一类的路径中, 但是一眼就能看出它们其实...

  • Python获取当前文件夹路径

    import osimport sysprint("sys.path[0] = ", sys.path[0])pr...

  • python路径配置

    搜索路径 1.内置模块 sys.path中找.sys.path中包括: working directory 操作系...

  • 2018-06-12 python __file__

    如果当前文件包含在sys.path里面,那么,file返回一个相对路径 如果当前文件不包含在sys.path里面,...

  • python -m 运行和直接运行的区别

    开门见山: 区别:sys.path不同 直接运行会将该脚本所在目录添加至sys.path 当做模块启动则会将当前运...

  • 解决导包问题

    解决办法,将source 文件夹加入 sys.path demo:

  • 查看Python安装路径

    Python2.7 import sysprint sys.path Python3.0 import syspr...

  • Python sys.path & PYTHONPATH

    参考: sys.pathPYTHONPATHPython sys.path详细介绍 环境 Mac Python 3...

  • 模块

    模块默认路径 import sys,ppint pprint.pprint(sys.path) (比print展示...

  • sys.path和os

    1.sys.path——动态地改变Python搜索路径 如果Python中导入的package或module不在环...

网友评论

      本文标题:sys.path总结

      本文链接:https://www.haomeiwen.com/subject/byetsxtx.html