python模块调用顺序

python包/模块,专栏总目录

1.python自定义模块

2.python模块调用顺序

3.python logging模块

4.python定义跨模块的全局变量

 

1、python解释器默认搜索路径

出于性能考虑,每个模块在每个解释器会话中只导入一遍。因此,如果你修改了你的模块,需要重启解释器或者如果你就是想交互式的测试这么一个模块,可以用 reload() 重新加载,例如 reload(modulename)。

1.1、当前工程加载顺序

1)导入一个叫 spam 的模块时,解释器先在当前目录中搜索名为 spam.py 的文件,import语句时导入spam.py,顺序执行其中代码。

目录结构:

project/
    test.py # 工程主函数所在文件
    spam.py # 包spam,文件内容:print("logs: import spam.py")

# test.py

import spam
=> logs: import spam.py

2)同时添加spam包,则优先调用包,spam被屏蔽。

project/
    test.py # 工程主函数所在文件
    spam.py # 包spam,文件内容:print("logs: import spam.py")
    spam/
        __init__.py # print("logs: import spam package.")
        pa.py # print("logs: import spam.pa.py")

test.py中,import spam,加载包spam中__init__.py文件内容,执行结果:

logs: import spam package.

import spam.pa,先加载spam包__init__.py,再加载spam.pa.py中内容,执行结果:

logs: import spam package.
logs: import spam.pa.py

结论:

import某个文件时,会在第一次加载该文件,顺序执行其中内容。若当前工程中,自定义包名与文件名重名,则该重名文件被覆盖,加载包。导入某个包下的子文件时,首先导入该包,依次从根到子文件加载。

1.2、工程之外的包加载顺序

如果当前工程没有找到的话,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中。sys.path 变量的初始值来自如下:

1)输入脚本的目录(当前目录);

2)环境变量 PYTHONPATH 表示的目录列表中搜索;

3)Python 默认安装路径中搜索。

>>> import sys
>>> sys.path
['', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', ..., '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages']

添加自己目录两种方法:

1)直接修改sys.path变量,添加要搜索的目录;

>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')

这种方法是在运行时修改,运行结束后失效。

2)设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。

注:自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。

1.3、加载顺序

解析时,按照sys.path中提供的路径,依次进行解析。调整目录顺序,可提高库的优先级(已测);

默认情况下,当前工程自定义包->文件->系统路径,顺序加载。

自己创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jingbo1801

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值