如何获取Python导入模块自身所在目录而非入口文件所在目录
解决方案
直接在Y/bar.py中使用如下代码即可获取自身所在的Y目录路径:
import pathlib import sys # 读取当前模块的真实文件路径,解析父目录 current_file = pathlib.Path(sys.modules[__name__].__file__) bar_parent_dir = current_file.parent.resolve(strict=True)
原代码返回X目录的原因
你原先的写法理论上应当返回Y目录,出现异常结果通常是以下两种场景:
- 你在
foo.py运行时修改了当前工作目录,resolve()默认会结合工作目录补全相对路径,添加strict=True参数可以强制读取文件的真实绝对路径,不受工作目录影响 - 你通过软链接、临时拷贝的方式导入
bar.py,或者导入路径配置错误导致实际加载的是X目录下的bar.py副本,你可以在bar.py中打印print(__file__)确认当前加载的文件实际路径
可选简化写法
如果确认没有软链接、工作目录修改的情况,直接在原代码基础上添加strict=True即可生效:
path = pathlib.Path(__file__).parent.resolve(strict=True)
内容的提问来源于stack exchange,提问作者Stack Overflow
相关产品推荐
相关产品推荐

