sys.path[0] 和 __file__ 的区别

本文详细解析了Python中获取脚本路径的两种方式:sys.path[0]与__file__的不同之处。sys.path[0]返回调用解释器的脚本目录路径,而__file__返回脚本或模块的文件路径。

获取脚本文件所在路径我们通常使用 sys.path[0]__file__

他们的区别在哪?

sys.path[0]:获取的是调用 python 解释器的脚本的目录路径,通俗来讲就是真正执行 sys.path[0] 的脚本所在目录。比如 a 脚本调用含有 sys.path[0] 的 b 脚本,实际获取的是 a 脚本的 sys.path[0]。

__file__:则获取的是脚本或模块所在文件的路径。

举例说明:
当前目录有两个文件:
./main.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from folder.module import Test

def get_path():
    mo_path = Test.get_sys_path() # sys.path[0]
    mo_path_2 = Test.get_file() # __file__
    ma_path = sys.path[0]
    print("get module_path by sys.path[0]:", mo_path)
    print("get module_path by __file__:", mo_path_2)
    print("main_path:", ma_path)

get_path()

./folder/module.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys

class Test:
    @staticmethod
    def get_sys_path() -> str:
        return sys.path[0]

    @staticmethod
    def get_file() -> str:
        return os.path.dirname(__file__)

执行脚本:./main.py

输出:

get module_path by sys.path[0]: /home/cyd/test/py_sys_path
get module_path by __file__: /home/cyd/test/py_sys_path/folder
main_path: /home/cyd/test/py_sys_path
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值