python sys.path[0_python -m与sys.path补

sys模块简介

DESCRIPTION:

This module provides access to some objects used or maintained by the interpreter and to functions that interact strongly with the interpreter.

由上易知sys模块提供的是和interpreter相关的对象的接口,而非操作系统,这里需要辨析的是经常容易搞混的os模块:

os----->This module provides a portable way of using operating system dependent functionality.

即sys提供的是和解释器有关的对象接口,而os提供的是和操作系统相关的接口。

sys常用对象sys.argv 返回调用所在py文件时的命令行参数列表,sys.argv[0]是该py文件名

sys.path 模块搜索路径(列表),即我们在import模块时进行搜索的路径,sys.path[0]是当前py文件所在的路径,如果是-m使用的话就是使用命令时所在的路径

sys.stdin sys.stdout sys.stderr 标准输入输出错误

sys.version 当前interpreter的版本

sys.platform 当前interpreter所在的操作系统

sys.getrefcount(object) 返回object的引用计数,注意如果是一个刚创建的对象new_object,使用sys.getrefcount(new_object)返回也不是1,而是2,因为new_object作为参数传入函数也算是一个引用计数+1,具体参考:python引用计数

sys.getsizeof(object) 返回object对象所占用的内存字节数,注意如果用sys.getsizeof(int)返回的是一个比c中所用的4字节更大的数,这是因为python在存储整数时还有其它附加信息(一切皆对象),可参考:python内整数占用字节“异常”

python -m

关于python -m在前面的blog中也有一些介绍,这里再进一步阐述一些更深的理解:

假如我们有一个func.py文件,在目录mydir下,即:mydir/func.py.则在mydir下我们用python func.py or python -m func的效果是一样的,但是如果是在mydir外的同级目录,python ./mydir/func.py与python -m mydir.func的区别就在于sys.path[0]的值不同,前者是mydir的路径,后者是mydir所在的目录所在的路径。

如:/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload 为sys.path返回的列表中的一个路径,我们在其中定义了一个mytest.py的文件,那么假如我们想要运行这个py文件呢?使用python命令直接就会遇到必须打出py文件所在的路径才能执行,而python -m mytest就可以直接执行,这是关于python -m的另外一个重点,它会自动在sys.path中搜索module,即假如我们有一个mod.py文件知道它在sys.path中的路径中,但是不确定具体位置,使用python -m无疑是最直接的选择。

tip:

这里对于python -m module,interpreter会自动在sys.path中搜索module,这和我们在import moudle时的行为是一样的,都是在sys.path中进行搜索,不过不一样的是python -m module执行的module其builtin的__name__是等于__main__的,而import时则是就是该module名,不是__main__

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值