当一个名为 spam 的模块被导入的时候,解释器首先寻找具有该名称的内置模块。如果没有找到,然后解释器从 sys.path 变量给出的目录列表里寻找名为 spam.py 的文件。sys.path 初始有这些目录地址:

包含输入脚本的目录(或者未指定文件时的当前目录)。

PYTHONPATH (一个包含目录名称的列表,它和shell变量 PATH 有一样的语法)。

取决于安装的默认设置

注解 在支持符号链接的文件系统上,包含输入脚本的目录是在追加符号链接后才计算出来的。换句话说,包含符号链接的目录并 没有 被添加到模块的搜索路径上。

在初始化后,Python程序可以更改 sys.path。包含正在运行脚本的文件目录被放在搜索路径的开头处, 在标准库路径之前。这意味着将加载此目录里的脚本,而不是标准库中的同名模块。 除非有意更换,否则这是错误。更多信息请参阅 python标准模块。

为了加速模块载入,Python在 pycache 目录里缓存了每个模块的编译后版本,名称为 module.version.pyc ,其中名称中的版本字段对编译文件的格式进行编码; 它一般使用Python版本号。例如,在CPython版本3.3中,spam.py的编译版本将被缓存为 __pycache__/spam.cpython-33.pyc。此命名约定允许来自不同发行版和不同版本的Python的已编译模块共存。

Python根据编译版本检查源的修改日期,以查看它是否已过期并需要重新编译。这是一个完全自动化的过程。此外,编译的模块与平台无关,因此可以在具有不同体系结构的系统之间共享相同的库。

Python在两种情况下不会检查缓存。首先,对于从命令行直接载入的模块,它从来都是重新编译并且不存储编译结果;其次,如果没有源模块,它不会检查缓存。为了支持无源文件(仅编译)发行版本, 编译模块必须是在源目录下,并且绝对不能有源模块。

给专业人士的一些小建议:

你可以在Python命令中使用 -O 或者 -OO 开关, 以减小编译后模块的大小。 -O 开关去除断言语句,-OO 开关同时去除断言语句和 doc 字符串。由于有些程序可能依赖于这些,你应当只在清楚自己在做什么时才使用这个选项。“优化过的”模块有一个 opt- 标签并且通常小些。将来的发行版本或许会更改优化的效果。

一个从 .pyc 文件读出的程序并不会比它从 .py 读出时运行的更快,.pyc 文件唯一快的地方在于载入速度。

compileall 模块可以为一个目录下的所有模块创建.pyc文件。

关于这个过程,PEP 3147 中有更多细节,包括一个决策流程图。

python模块搜索路径_Python模块搜索路径相关推荐

  1. python模块大全使用说明_python模块详解

    使用python时,常常会涉及到库的调用,这就需要掌握模块的基本知识.本文分为如下几个部分 概念说明 模块的简单调用 包的导入 特殊的__init__.py文件 导入模块的搜索路径 __all__ 绝 ...

  2. python好用的模块和包_Python模块和包详细讲解与实例分析

    一丶模块 我们经常说模块模块的,究竟什么是模块呢? 一个模块就是包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀 但其实import加载的模块分为四个通用类别: 1.使用Pyth ...

  3. python加载机制_Python 模块的加载顺序

    基本概念 module 模块, 一个 py 文件或以其他文件形式存在的可被导入的就是一个模块 package 包,包含有 init 文件的文件夹 relative path 相对路径,相对于某个目录的 ...

  4. python怎么定义名称_Python模块的定义,模块的导入,__name__用法实例分析

    本文实例讲述了Python模块的定义,模块的导入,__name__用法.分享给大家供大家参考,具体如下: 相关内容: 什么是模块 模块的导入 模块的导入 自模块的导入 同级目录导入 不同级目录导入 目 ...

  5. python 阮一峰_Python模块整理

    这两天学习了一些基本的Python模块,现在做一些整理,理清楚 查看大佬的理解:http://www.cnblogs.com/alex3714/articles/5161349.html 开始时间:1 ...

  6. python模块的函数_Python模块及函数的使用

    一. 1.模块是包含函数和其他语句的脚本文件,以".py"为后缀名,在Python中可以通过导入模块来使用模块中的函数或数据. 创建一个文件fun.py内容如下: def f1() ...

  7. python导入模块以及类_python模块的导入以及模块简介

    标签: 一.模块的定义及类型 1.定义 模块就是用一堆的代码实现了一些功能的代码的集合,通常一个或者多个函数写在一个.py文件里,而如果有些功能实现起来很复杂,那么就需要创建n个.py文件,这n个.p ...

  8. python获取绝对路径_python文件绝对路径写法介绍(windows)

    python文件绝对路径写法介绍(windows) python在描述路径时有两种方式: 'd:\\a.txt',转义的方式 r'd:\a.txt',声明字符串不需要转义 (使用raw string, ...

  9. python安装的模块在哪里_python模块安装目录在哪里

    Python的强大,其中一个重要原因是Python有很丰富的库(模块)从而可以比较方便地处理各种各样的问题.Python开发的第三方modules一般都安装在一些固定的路径,如下: Unix(Linu ...

最新文章

  1. C#检测电脑的一些设置通用类(经典推荐)
  2. 【 MATLAB 】norm ( Vector and matrix norms )(向量范数以及矩阵范数)
  3. 网站建设想要出类拔萃还要从基础上做创新
  4. python编程基础题库_大学moocPython编程基础题库及答案
  5. mysql导入sql脚本命令
  6. 4个强大的Linux服务器监控工具[转]
  7. Python 字符串/列表/元组/字典之间的相互转换 - Python零基础入门教程
  8. Mr.J-- jQuery学习笔记(八)--CSS样式操作
  9. 计算机网络课设不会,计算机网络课设讲述.doc
  10. 机器学习基础:逻辑回归(Machine Learning Fundamentals: Logistic Regression)
  11. 购买代购的产品算违法吗——看空姐代购被判刑有感
  12. 世界上最简单的会计书(资产负债表)
  13. HTML正方体滚动特效
  14. 抖音实战~分享模块~短视频下载(保存到相册)
  15. img 获取二次元图片地址
  16. 《C++大学教程》学习笔记(九)
  17. 有利润表模板的BI软件有哪些?
  18. sendfile相关
  19. 883. 三维形体投影面积
  20. vue3项目ts文件引入LodopFuncs.js打印控件

热门文章

  1. MyBatis之查询缓存
  2. Hive Shell
  3. windows + cmake + vs2019 编程
  4. G20杭州峰会上云 实现0安全事件
  5. 标记 (TAG) 您的 k8s 集群资源
  6. 优酷背后的大数据秘密
  7. 带出7个“师弟”,支付宝BASIC College的辅导员是个伪90后
  8. 容器安全拾遗 - Rootless Container初探
  9. 灰度测试试验流量“洗牌”
  10. 用数据库修改服务器的时间格式,如何查询数据库服务器的时间格式