2024-10-08 20:20:50 发布
网友
我希望能够获得导入python库的文件的路径。我该怎么做
例如:
用户在C:\Users\Bob\bobsproject\main.py创建一个文件。在库中,我希望能够获取文件的路径,并将其作为txt读取。我该怎么做
C:\Users\Bob\bobsproject\main.py
如果您想获取正在(可能是间接地)加载库的驱动程序脚本的名称,可以使用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的东西很容易地演示
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])
如果您想获取正在(可能是间接地)加载库的驱动程序脚本的名称,可以使用python以名称^{} 运行脚本这一事实。与任何其他模块一样,您可以从^{} 获取它,并访问它的^{} 属性(如果存在):
KeyError
不太可能发生(即使使用python -m
运行脚本也不太可能发生),但为了安全起见,这是很有用的。AttributeError
的可能性更大,并且可以用类似python -c
的东西很容易地演示如果您想要更复杂的东西,比如包含实际调用库函数的代码的文件,则可能必须使用^{} 模块或类似模块。当然,这将更加不稳定,但仍可能满足您的需求:
请注意^{} 在其官方文档中明确使用了“guess”一词,而^{} 有时可能是一只烦躁的野兽
此处引用的第二部分代码:https://stackoverflow.com/a/1095621/2988730
请记住,这里有两个选项。如果将此代码直接放在库模块中,则在第一次导入模块时,它将只执行一次。如果将其放置在用户可以直接调用的函数中,每次都会看到打印输出。如果将第二个代码段放在实用程序函数中,然后从公共模块函数调用该函数,请不要忘记增加帧索引以反映:
相关问题 更多 >
编程相关推荐