Python中通过__file__和pathlib的parent方法为什么最多只能向上到当前工作目录?

pathlib.Path(__file__).parent.parent.parent.parent.absolute()
原本以为会从 __file__ 那个路径一路向上, 看文档也没找到, 这是什么原因呢, 我就是想找个和 cwd 无关, 但是和当前脚本文件绝对相关的绝对路径而已
Python中通过__file__和pathlib的parent方法为什么最多只能向上到当前工作目录?
2 回复
我理解你的困惑。实际上,__file__ 和 pathlib.Path.parent 本身并没有“最多只能向上到当前工作目录”的限制。这个误解可能源于对路径解析的观察。
让我用一个完整的例子来说明:
from pathlib import Path
# 假设文件结构:
# /home/user/project/src/module.py
# /home/user/project/
# 在 module.py 中:
current_file = Path(__file__)
print(f"当前文件: {current_file}")
# 可以一直向上到根目录
parent1 = current_file.parent # src
parent2 = current_file.parent.parent # project
parent3 = current_file.parent.parent.parent # user
parent4 = current_file.parent.parent.parent.parent # home
parent5 = current_file.parent.parent.parent.parent.parent # / (根目录)
print(f"父级1: {parent1}")
print(f"父级2: {parent2}")
print(f"父级3: {parent3}")
print(f"父级4: {parent4}")
print(f"父级5: {parent5}")
# 验证这些路径是否存在
for i, path in enumerate([parent1, parent2, parent3, parent4, parent5], 1):
print(f"父级{i} 存在: {path.exists()}")
你遇到的情况可能是:
- 相对路径问题:如果
__file__返回的是相对路径,那么.parent操作会在相对路径范围内进行 - 符号链接:如果文件是通过符号链接访问的,路径解析可能会有所不同
- 当前工作目录的影响:当你使用相对路径时,确实会受到当前工作目录的限制
关键点:pathlib.Path.parent 只是对路径字符串进行解析,它不关心文件系统实际存在什么。你可以一直调用 .parent 直到根目录:
from pathlib import Path
path = Path("some/relative/path/file.txt")
while path != path.parent: # 直到根目录
print(path)
path = path.parent
print(f"根目录: {path}")
如果你发现无法向上遍历到期望的目录,检查一下:
__file__返回的是绝对路径还是相对路径- 是否有符号链接影响了路径解析
- 你的期望路径是否真的在文件系统中存在
总结建议:pathlib.parent 没有层级限制,问题可能出在路径表示或文件系统结构上。
问题已解决
前面 file 的时候就该 absolute() 一次
结贴

