从库中获取调用方文件的路径

2024-10-08 20:20:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够获得导入python库的文件的路径。我该怎么做

例如:

用户在C:\Users\Bob\bobsproject\main.py创建一个文件。在库中,我希望能够获取文件的路径,并将其作为txt读取。我该怎么做


Tags: 文件用户py路径txtmainusersbob
1条回答
网友
1楼 · 发布于 2024-10-08 20:20:50

如果您想获取正在(可能是间接地)加载库的驱动程序脚本的名称,可以使用python以名称^{}运行脚本这一事实。与任何其他模块一样,您可以从^{}获取它,并访问它的^{}属性(如果存在):

import sys

try:
    print(sys.modules['__main__'].__file__)
except KeyError:
    print('libray not loaded from script')
except AttributeError:
    print('script not loaded from file')

KeyError不太可能发生(即使使用python -m运行脚本也不太可能发生),但为了安全起见,这是很有用的。AttributeError的可能性更大,并且可以用类似python -c的东西很容易地演示

如果您想要更复杂的东西,比如包含实际调用库函数的代码的文件,则可能必须使用^{}模块或类似模块。当然,这将更加不稳定,但仍可能满足您的需求:

import inspect

module = inspect.getmodule(inspect.stack()[1][0])
try:
    print(module.__file__)
except AttributeError:
    print(f'module "{module.__name__}" not loaded from file')

请注意^{}在其官方文档中明确使用了“guess”一词,而^{}有时可能是一只烦躁的野兽

此处引用的第二部分代码:https://stackoverflow.com/a/1095621/2988730

请记住,这里有两个选项。如果将此代码直接放在库模块中,则在第一次导入模块时,它将只执行一次。如果将其放置在用户可以直接调用的函数中,每次都会看到打印输出。如果将第二个代码段放在实用程序函数中,然后从公共模块函数调用该函数,请不要忘记增加帧索引以反映:

module = inspect.getmodule(inspect.stack()[2][0])

相关问题 更多 >

    热门问题