微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Python库中获取主脚本路径的正确方法

如何解决从Python库中获取主脚本路径的正确方法

我正在编写一个Python库,您可以从文件中加载对象并对其进行处理。为了方便起见,我想这样做,以便人们可以提供三种路径:

  1. 以“ /”开头的路径,它将被解释为绝对路径

  2. 以“〜/”开头的路径,该路径将被解释为相对于用户的主目录(我打算使用其os.path.expanduser

  3. 以这两个开头的路径,这将被解释为相对于导​​入我的库的顶级脚本目录的相对路径。

我的问题是:处理第三种情况的最佳方法是什么?我在Stack Overflow上遇到的两种方法都是klugey:

1)

import __main__
if hasattr(__main__,"__file__"):
    script_dir = os.path.dirname(os.path.abspath(__main__.__file__))
import inspect
frame_info = inspect.stack()[-1]
mod = inspect.getmodule(frame_info[0])
script_dir = os.path.dirname(mod.__file__)

很明显,如果我们从交互式终端或其他设备上运行,这两种方法都会失败,并且在这种情况下,我想退回到仅将其视为绝对路径的方式。

无论如何,我感觉到在库中使用像这样的检查是不受欢迎的,但是另一种方式似乎也很笨拙。有一个我不知道的更好的方法吗?

解决方法

使用内置软件包pathlib的{​​{1}}方法。它默认为顶层软件包的根文件夹。

如果更改工作目录,将无法工作。虽然,不带前缀的路径通常是相对于工作目录的。

getcwd

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。