6

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

print(here())

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

过去我需要它来进行自包含的测试(需要一些外部文件),我目前想知道它是否是一种有用的方法来定位程序所需的一些支持文件。但我从来没有找到这样做的好方法。检查模块听起来应该可以工作,但您似乎需要在该模块中定义的类或函数。

特别是,模块实例包含__file__属性,但我看不到如何获取“当前”模块。对象有一个__module__属性,但这是模块名称,而不是模块实例。

我想一种方法是抛出并捕获异常并检查内容,但这似乎很辛苦。当然,我错过了一种简单易行的方法吗?

4

2 回答 2

12

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

import os
os.path.abspath(__file__)
于 2012-08-22T00:14:50.090 回答
3

要获取与您的包一起分发的外部文件的内容,您可以使用pkg_util.get_data()(stdlib) 或pkg_resources.resouce_string()(setuptools) 来支持从 zip-archives 或由 py2exe、PyInstaller 或类似文件创建的独立可执行文件执行,例如.

于 2012-08-22T01:05:39.057 回答