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

你可能感兴趣的:(python,python,开发语言)