当前位置: 首页 > 后端技术 > Python

python-m和sys.path补充

时间:2023-03-26 00:45:46 Python

sys模块简介:该模块提供对解释器使用或维护的一些对象以及与解释器进行强交互的函数的访问。尚易智提供的sys模块是和解释器相关对象的接口,不是操作系统。这里需要区分的是经常混淆的os模块:os----->Thismoduleprovidesaportablewaytouseoperatingsystemdependentfunctionality。即sys提供与解释器相关的对象接口,os提供与操作系统相关的接口。sys.argv,一个常用的sys对象,返回调用所在py文件时的命令行参数列表。sys.argv[0]是py文件名sys.path模块搜索路径(列表),也就是我们导入模块时搜索的路径。sys.path[0]是当前py文件所在的路径。如果使用-m,则为命令使用的路径sys.stdinsys.stdoutsys.stderr标准输入输出错误sys.version当前解释器版本sys.platformsys.getrefcount(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在之前的博客中也有一些介绍,这里进一步解释一些更深层次的理解:如果我们在mydir目录下有一个func.py文件,即:mydir/func.py。那么在mydir下我们使用pythonfunc.py或者python-mfunc的效果是一样的,但是如果是在mydir之外的同级目录下,python./mydir/func.py和python-mmydir的区别。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-mmytest即可。这是python-m的另一个重要点,它会自动在sys.path中搜索模块,也就是说,如果我们有一个mod.py文件知道它在sys.path中的路径,但不确定确切的位置,使用python-m无疑是最直接的选择。tip:这里对于python-mmodule,解释器会自动在sys.path中搜索模块,这和我们导入moudle时的行为是一样的。都是在sys.path中查找,不同的是python-m模块执行的模块的builtin的__name__等于__main__,导入时是模块名,不是__main__