如何了解安装给定Python模块的源文件的位置?Windows上的方法与Linux上的方法不同吗?
我正在努力寻找datetime模块的来源,但我也对更一般的答案感兴趣.
我希望能够从导入的模块中动态检索当前执行的模块或类名.这是一些代码:
foo.py:
def f():
print __name__
Run Code Online (Sandbox Code Playgroud)
bar.py:
from foo import f
def b(): f()
Run Code Online (Sandbox Code Playgroud)
这显然不起作用__name__,因为包含该功能的模块的名称.我希望在foo模块内部访问的是当前正在使用的执行模块的名称foo.因此,在上面的情况下,它将是bar但如果导入任何其他模块foo我想foo动态地访问该模块的名称.
编辑:该inspect模块看起来非常有前途,但它并不完全是我想要的.我希望的是我可以访问的某种全局或环境级变量,它包含当前执行模块的名称.并不是说我不愿意遍历堆栈来查找信息 - 我只是认为Python可能已经暴露了这些数据.
编辑:这是我试图使用它的方式.我有两个不同的Django应用程序,它们都需要将错误记录到文件中.让我们说它们被称为"AppOne"和"AppTwo".我还有一个地方可以记录这些文件:" /home/hare/app_logs".在任何给定点的每个应用程序中,我希望能够导入我的记录器模块并调用将日志字符串写入文件的日志功能.但是,我想要做的是创建一个目录,app_logs该目录是当前应用程序的名称("AppOne"或"AppTwo"),以便每个应用程序的日志文件将进入各自的日志记录目录.
为了做到这一点,我认为最好的办法是对记录器模块能够获得某种形式的全局变量,它表示当前应用程序的名称,因为它是负责了解父日志目录的位置,并创建应用程序的日志目录,如果它还不存在.