美文网首页python
python 执行时是如何查找包和模块的

python 执行时是如何查找包和模块的

作者: wit92 | 来源:发表于2020-06-15 00:15 被阅读0次

    解释器执行时,

    首先搜索 built-in module ,也就是解释器查找模块最先查找的是built-in module ,

    其次搜索 sys.path所包含的路径。

    这样的查找顺序将会引起同名包或模块被遮蔽的问题。

    文件目录结构

    ├── os.py
    ├── test2.py
    ├── redis.py
    

    test2.py文件内容

    import os
    from redis import Redis
    

    linux命令行执行test2.py:

    python test.py

    执行结果:

    Traceback (most recent call last):
      File "test.py", line 2, in <module>
        from redis import Redis
    ImportError: cannot import name Redis
    

    由于osbuilt-in module,即使在同目录下有同名模块,解释器依然可以找到正确的os模块,而 redis 属于第三方模块,默认安装位置是 python 环境变量中的 site-packages 下,解释器启动之后会将此目录加入 sys.path,按照上面所说的查找顺序,优先在执行文件所在的目录查找,由于其在 sys.path 的首位,因而本地的redis被导入。

    注意:

    sys.argv[0] 是获得入口执行文件路径,

    __file__ 是获得任意模块文件的路径。

    sys.path 打印出来的列表在终端第一个元素是空字符串,但不影响使用。在pycharm不是空字符串。

    进入交互式执行环境,解释器会自动把当前目录加入 sys.path, 这时当前目录是以相对路径的形式出现在 sys.path 中:

    >>> import os.path
    >>> import sys
    >>> os.path.abspath(sys.path[0])
    '/home/l/PycharmProjects/test_modules'
    

    核心风格: import 语句的模块顺序

    推荐所有的模块在 Python 模块的开头部分导入。

    而且最好按照以下顺序:
    1,Python 标准库模块
    2,Python 第三方模块
    3,应用程序自定义模块

    相关文章

      网友评论

        本文标题:python 执行时是如何查找包和模块的

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