Python-获取调用模块';s通过回溯的路径,问题?

Python-获取调用模块';s通过回溯的路径,问题?,python,module,path,traceback,Python,Module,Path,Traceback,在python中,我经常发现自己通过以下调用加载包资源: import os fp = open(os.path.join(os.path.dirname(os.path.realpath(__file__)), "resource.json"), "r") import os, traceback def with_module_directory(filename): return os.path.join(os.path.dirnam

在python中,我经常发现自己通过以下调用加载包资源:

import os
fp = open(os.path.join(os.path.dirname(os.path.realpath(__file__)),
                       "resource.json"), "r")
import os, traceback
def with_module_directory(filename):
    return os.path.join(os.path.dirname(traceback.extract_stack()[-2][0]),
                        filename)
我一直在考虑使用如下库函数来消除这种丑陋。问题是函数将位于库中,而不是我想要获取其目录的文件中。我可以通过回溯包解决这个问题,例如通过以下方法:

import os
fp = open(os.path.join(os.path.dirname(os.path.realpath(__file__)),
                       "resource.json"), "r")
import os, traceback
def with_module_directory(filename):
    return os.path.join(os.path.dirname(traceback.extract_stack()[-2][0]),
                        filename)
现在,如果
with_module_directory()
位于
/home/user1/mylibs/utils.py
,当
/home/user1/myscripts
中的模块调用
with_module_directory(“resource.json”)
时,结果将是
“/home/user1/myscripts/resource.json”

然而,我担心这样做在某种程度上是危险的。手动查看堆栈跟踪通常感觉是件坏事,就像我破坏了封装一样。但我想不出任何具体的问题,所以我提出了一个问题:有人能想到这样做会造成什么问题吗?这是不是因为某些特定的原因造成的不良行为


注意:我意识到我可以强制用户使用模块路径(“resource.json”,“file”)调用
,但如果没有实际理由避免使用更简单的界面,我宁愿使用它。

要查找模块、函数或类的位置,请使用
检查
模块:

import inspect
print(inspect.getsourcefile(some_module))
您可以使用它来查找感兴趣的代码单元的位置。如果你把它放在一个库中,只需要把它包装在一个带参数的函数中


实际上,您也可以对
\uuuuu文件\uuuuuu
执行同样的操作,如果需要的话:只需将其作为参数传递给将执行其余操作的函数。

要查找模块、函数或类的位置,请使用
检查
模块:

import inspect
print(inspect.getsourcefile(some_module))
您可以使用它来查找感兴趣的代码单元的位置。如果你把它放在一个库中,只需要把它包装在一个带参数的函数中

实际上,如果需要,您也可以对
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
执行相同的操作:只需将其作为