获取脚本文件所在路径我们通常使用 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