从PYTHONPATH打开文件
在一个程序中,受到Java做事方式的影响,我想从解释器的PYTHONPATH目录中读取一个静态文件(实际上是一个日志配置文件)。我知道我可以这样做:
import foo
a = foo.__path__
conf = open(a[0] + "/logging.conf")
但我不确定这是不是“Python风格”的做法。我该如何分发这个日志配置文件,让我的应用程序不需要外部配置就能读取它呢?
2 个回答
1
这里有一段代码,是根据Nix在上面提到的链接写的,不过采用了更偏向函数式编程的风格:
def search_path(pathname_suffix):
cands = [os.path.join(d,pathname_suffix) for d in sys.path]
try:
return filter(os.path.exists, cands)[0]
except IndexError:
return None
1
一般来说,这样做是可以的,不过我不太确定你是否需要 a[0]
,因为这只会给你路径的第一个字符。你应该使用 os.path.join
,而不是直接在后面加一个 /
,这样可以确保在不同的操作系统上都能正常工作。你可能还想把路径标准化一下,也就是用 os.path.abspath(os.path.dirname(foo.__path__))
。需要注意的是,如果 __path__
在一个压缩文件里或者使用了其他导入技巧,这种方法就不太管用了,但我觉得你不用太担心这个(在Python的主程序中这样做并不常见,跟Java不一样)。
如果你想支持压缩文件,可以使用 pkg_resources,不过现在这个库有点过时了(在新的 packaging 模块里我没有看到对应的API)。