首页 > 解决方案 > 获取顶级 Python 脚本的路径

问题描述

我想获取调用的(顶级)Python 脚本的路径。实际上它是一个包,我正在运行它python3 -m <package-name>。我研究了网络和 Stack Overflow,但找不到合适的解决方案。__file__并且__path__不工作,os.getcwd()如果从另一个位置调用包,则不工作,sys.argv[0]不保证具有完整路径。我认为这种方法import __main__不是一个好方法,因为我将顶级脚本导入到依赖脚本中。

标签: python

解决方案


我遇到了 open("xyz.dat","r") 在与 .py 文件相同的文件夹中找不到 xyz.dat 的问题

通过在我的 Sublime Text 3 构建脚本中添加 "working_dir": "$file_path" 解决了我的问题。

但是,我想知道 python 库是如何做到的。例如,Kivy 的 AsyncImage 的构造函数有一个“source”参数,可以成功找到与顶级 py 文件位于同一文件夹中的图像文件。

经过一番挖掘,我发现了 Kivy 使用的方法:

将 kivy.resources 导入为 kr

full_path = kr.resource_find("image.png")

我不喜欢依赖构建脚本中的设置来查找同一文件夹中的文件,所以这是我将在未来的 Kivy 项目中遵循的方法。

顺便说一句,resource_find 确实依赖 sys.argv[0] 来“了解”顶级 python 脚本的完整路径。


推荐阅读