如何找到脚本的目录?

681 投票
12 回答
711760 浏览
提问于 2025-04-16 11:27

考虑以下这段Python代码:

import os
print os.getcwd()

我使用 os.getcwd()获取脚本文件的目录位置。当我从命令行运行这个脚本时,它能给我正确的路径,但当我从Django视图中运行这个脚本时,它却打印出 /

我该如何在Django视图中运行的脚本里获取脚本的路径呢?

更新:
总结一下到目前为止的回答 - os.getcwd()os.path.abspath() 都能给出当前的工作目录,但这个目录可能并不是脚本所在的目录。在我的网络主机设置中,__file__ 只返回文件名,而没有路径。

难道在Python中没有办法(总是)获取脚本所在的路径吗?

12 个回答

159

我使用:

import os
import sys

def get_script_path():
    return os.path.dirname(os.path.realpath(sys.argv[0]))

正如aihama在评论中提到的,你可以在一个模块里定义这个函数,然后在不同的脚本中使用它。

211

试试 sys.path[0]

引用一下Python文档的内容:

在程序启动时,这个列表的第一个项目 path[0] 是包含用来启动Python解释器的脚本的目录。如果脚本目录不可用(比如说在交互模式下启动解释器,或者脚本是从标准输入读取的),那么 path[0] 就是一个空字符串,这样Python会优先在当前目录中查找模块。注意,脚本目录会被放在 PYTHONPATH 变量所指定的路径之前。

来源: https://docs.python.org/library/sys.html#sys.path

1086

你需要在 __file__ 上调用 os.path.realpath,这样当 __file__ 只是一个文件名而没有路径时,你仍然可以得到它所在的目录路径:

import os
print(os.path.dirname(os.path.realpath(__file__)))

撰写回答