模块如何获取在 python 中导入它的文件的路径?
How can a module get the path of the file that is importing it in python?
我有导入 module.py
的文件 app.py
。我需要找出 app.py
的路径,例如:/home/user/app/app.py
,它在同一个文件夹中工作正常但是当我从不同的文件夹调用 app.py
时,我的当前目录是 /home/user
我得到我的当前目录而不是 app.py
所在的目录。
这是module.py的内容。
os.getcwd()
<-- 这returns我的工作路径
os.path.dirname(__file__)
<-- 这个returns模块路径
最好的方法是什么?我有点卡住了,在 Google 上没有找到任何关于它的信息。
在您要导入的模块中使用以下代码行:
Module.py
import inspect
# Return the frame object for the caller's stack frame.
frame = inspect.currentframe()
# Get calling rame from list of all call frames.
calling_frame = inspect.getouterframes(frame)[1][0]
#Prints a traceback tuple.
print inspect.getframeinfo(calling_frame)
此外,您还可以尝试另一种技巧。我不会建议将它用于生产代码,但它只是为了好玩 :) :
1. Generate the exception in your module.
2. Catch it and find the Traceback.
3. Manipulate the Traceback according to you requirement.
我有导入 module.py
的文件 app.py
。我需要找出 app.py
的路径,例如:/home/user/app/app.py
,它在同一个文件夹中工作正常但是当我从不同的文件夹调用 app.py
时,我的当前目录是 /home/user
我得到我的当前目录而不是 app.py
所在的目录。
这是module.py的内容。
os.getcwd()
<-- 这returns我的工作路径
os.path.dirname(__file__)
<-- 这个returns模块路径
最好的方法是什么?我有点卡住了,在 Google 上没有找到任何关于它的信息。
在您要导入的模块中使用以下代码行:
Module.py
import inspect
# Return the frame object for the caller's stack frame.
frame = inspect.currentframe()
# Get calling rame from list of all call frames.
calling_frame = inspect.getouterframes(frame)[1][0]
#Prints a traceback tuple.
print inspect.getframeinfo(calling_frame)
此外,您还可以尝试另一种技巧。我不会建议将它用于生产代码,但它只是为了好玩 :) :
1. Generate the exception in your module.
2. Catch it and find the Traceback.
3. Manipulate the Traceback according to you requirement.