python - 获取顶级 Python 脚本的路径
问题描述
我想获取调用的(顶级)Python 脚本的路径。实际上它是一个包,我正在运行它python3 -m <package-name>
。我研究了网络和 Stack Overflow,但找不到合适的解决方案。__file__
并且__path__
不工作,os.getcwd()
如果从另一个位置调用包,则不工作,sys.argv[0]
不保证具有完整路径。我认为这种方法import __main__
不是一个好方法,因为我将顶级脚本导入到依赖脚本中。
解决方案
我遇到了 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 脚本的完整路径。
推荐阅读
- javascript - 使用基于路由器参数的 Vue http 获取数据
- java - 构造具有相同属性但对象名称不同的 POJO
- powerbi - 根据另一个表中的值计算一个表中的不同值
- oracle - 给出不同 ASCII 输出的 Oracle 程序
- jquery - 如何从角度调用jquery函数?
- apache-spark - 无法使用 Spark 在 Datastax 上初始化图形
- git - 我可以从 git 中得到一个只有冲突的补丁吗?
- python - 独特产品与 itertools 的组合
- html - 如何减少 flexbox 中项目之间的空间 justify-content: space-between
- javascript - 循环内意外的`await`