获取文件执行模块代码的当前路径

时间:2019-05-07 17:32:17

标签: python

我有一个here.py,它获得了最近的文件夹名称:

import os
def here():
    return os.path.basename(os.path.dirname(__file__))

我有app.py会导入here.py并将其命名为:

from this_app.somewhere import here
print(here.here())

最后,这是我的文件夹结构:

this_app
  ├ __init__.py
  ├ app.py
  └ somewhere
    ├ __init__.py
    └ here.py

因此您可以看到我运行app.py时它将打印somewhere,因为它正在执行here.py中的代码

我想将代码保留在here.py中,但是将其打印出文件夹app.py所在的位置。换句话说,我想打印导入模块的文件的文件夹而不是文件夹模块所在的位置,即使我希望将决定打印内容的代码放在模块中。

我希望这是有道理的。 基本上,如何更改here.py,以便在我调用app.py时显示this_app(即,它显示app.py所在位置的文件夹名称) ?

(最后一个注意事项:我的实际用例比这要复杂得多,因此它不能求助于当前的工作目录,因为我可能从远离任何目录的目录中启动app.py。它必须是相对于导入here模块的文件,即app.py。)

1 个答案:

答案 0 :(得分:1)

__file__属性是按模块定义的。您需要将调用模块的__file__传递给here

here.py

import os
def here(calling_path):
    return os.path.basename(os.path.dirname(calling_path))

并使用它:

from this_app.somewhere import here
print(here.here(__file__))