如果conf
是Python软件包,则可以使用pkgutil.get_data()
:
import pkgutil
data = pkgutil.get_data("conf", "constants.cfg")
或是否setuptools
已安装–pkg_resources.resource_string()
:
import pkg_resources
data = pkg_resources.resource_string('conf', 'constants.cfg')
如果constants.cfg
不在软件包中,则将其路径作为命令行参数传递,或者将其设置为环境变量(例如)CONfig_MANAGER_CONSTANTS_PATH
,或者从一组固定的默认路径(例如)中读取os.path.expanduser("~/.config/ConfigManager/constants.cfg")
。要查找放置用户数据的位置,可以使用appdirs
module。
os.getcwd()
如果您可能ConfigManager.py
从其他目录运行,则不能使用该函数返回当前工作目录。相对路径"../../..."
由于相同的原因而行不通。
如果可以确定ConfigManager.py
和constants.cfg
在文件系统中的相对位置不会改变:
import inspect
import os
import sys
def get_my_path():
try:
filename = __file__ # where we were when the module was loaded
except NameError: # fallback
filename = inspect.getsourcefile(get_my_path)
return os.path.realpath(filename)
# path to ConfigManager.py
cm_path = get_my_path()
# go 6 directory levels up
sp_path = reduce(lambda x, f: f(x), [os.path.dirname]*6, cm_path)
constants_path = os.path.join(sp_path, "conf", "constants.cfg")