File 如何找到;“当前”;Python 3中的源文件?

File 如何找到;“当前”;Python 3中的源文件?,file,python-3.x,File,Python 3.x,找到我正在“执行”某些代码的文件路径的最简单方法是什么?我的意思是,如果我有一个包含以下内容的文件foo.py: print(here()) 我想看看/some/path/foo.py(我意识到实际上“正在执行”的文件是复杂的,但我认为上面的定义很好-一个包含一些函数的源文件,当执行时,这些函数会给出所述文件的路径) 我在过去需要它来使测试(需要一些外部文件)独立,现在我想知道它是否是定位程序所需的一些支持文件的有用方法。但我从来没有找到一个好方法来做这件事。inspect模块听起来应该可以工

找到我正在“执行”某些代码的文件路径的最简单方法是什么?我的意思是,如果我有一个包含以下内容的文件
foo.py

print(here())
我想看看
/some/path/foo.py
(我意识到实际上“正在执行”的文件是复杂的,但我认为上面的定义很好-一个包含一些函数的源文件,当执行时,这些函数会给出所述文件的路径)

我在过去需要它来使测试(需要一些外部文件)独立,现在我想知道它是否是定位程序所需的一些支持文件的有用方法。但我从来没有找到一个好方法来做这件事。inspect模块听起来应该可以工作,但您似乎需要在该模块中定义的类或函数

特别是,模块实例包含
\uuuu文件\uuuu
属性,但我看不出如何获取“当前”模块。对象有一个
\uuuuuuuuuuuuuuuuu模块
属性,但那是模块名称,而不是模块实例


我想一种方法是抛出并捕获异常并检查内容,但这似乎是一项艰巨的工作。当然有一种简单易行的方法我没有找到?

来获取当前文件的绝对路径:

import os
os.path.abspath(__file__)

要获得随包分发的外部文件内容,您可以使用
pkg_util.get_data()
(stdlib)或
pkg_resources.resource_string()
(setuptools)来支持从zip存档文件或由py2exe、PyInstaller或类似软件创建的独立可执行文件执行。

噢!这么简单吗?!有一个“自由浮动”文件。哦我想这就是模块的属性。我是个白痴。你不会相信我花了多长时间寻找这个。谢谢(10分钟内不能接受…@andrew:这不是免费的。这是一个普通的模块级别variable@andrew当前位置请注意,虽然这回答了问题,但这通常不是做你想做的事情的正确方法。这是因为当前文件可以位于ZIP文件中,在这种情况下,查找所需的支持文件将失败。见JF的答案。