我正在寻找os.chdir
被调用后的模块路径。
在这个例子中:
import os
os.chdir('/some/location')
import foo # foo is located in the current directory.
os.chdir('/other/location')
# How do I get the path of foo now? ..is this impossible?
..foo.__file__
变量将是'foo.py'
,也将是inspect.stack()[0][1]
- 但是,现在无法知道它'foo.py'
的位置,对吗?
我可以在 的外部(或内部,在导入时不将其存储为变量)使用什么'foo'
,这将使我能够发现 的位置foo
?
我正在尝试构建一种确定的方法来确定模块正在从哪个文件执行。因为我使用 IPython 作为 shell,所以我实际上可能会遇到这种情况。
用法示例:
我正在处理的项目有两个版本,我在调试它们的过程中比较它们的行为。..假设他们在目录'proj1'
和'proj2'
. ..foo
我又在 IPython 解释器中加载了哪些内容?
理想:
In [242]: from my_tools import loc
In [243]: loc(foo)
'/home/blah/projects/proj2/foo.py'
** 正如 abarnert 指出的那样,这是不可能的,因为 python 不记录相对导入的基本目录位置。但是,这将适用于正常(非相对)导入。
** 此外,常规 python(相对于 IPython)不允许从当前目录导入,而只能从模块目录导入。