上下文:
我目前正在开发一个由3个不同的Python项目组成的产品:P1、D1、D2。
D1和D2是独立的库(也是由我开发的),应该通过setuptools安装。P1是主要的项目,它依赖于D1和D2。库D1和D2需要配置文件来设置一些自定义参数,比如config_d1.json和config_d2.json。
问题:
由于P1需要自定义D1和D2的配置,所以我想知道设置这些文件位置的最佳方法。
当前解决方案:
我正在考虑使用D1_CONF_HOME和D2_CONF_HOME等环境变量以及D1和D2内部的环境变量来设置配置文件的位置。
D1_CONF_HOME = os.getenv('D1_CONF_HOME', '')
SETTINGS_LOCATION = path.join(D1_CONF_HOME, 'config_d1.json')但是我想知道这是否真的是毕达通的方式(我来自Java世界,我们通常是这样做的)。
发布于 2014-05-25 00:42:53
我不知道它有多高,但我就是这样做的。在setup.py中,我有:
setup(name='pkg-name',
...
packages=['pkg-name'],
package_dir={'pkg-name':'pkg-dir'},
package_data={'pkg-name':['config/cfg1.json', 'config/cfg1.json']},
...请注意,“config”是项目中“pkg-dir”的一个子文件夹。
您需要做的最后一件事是编写将找到包和配置路径的函数。如果在库中实现,而不是在项目P1中实现它,这些函数将只在P1中工作。在我的例子中,我已经在我的库中创建了一个帮助模块,并将它们放到这个模块中,这样我就可以从我的项目P1中创建一个Helper.get_config_dir()。
def get_pkg_dir():
f = __file__
for _ in range(100)
f = os.path.abspath(os.path.dirname(f))
if re.search(r'pkg-name$', f) is not None:
break;
return f
def get_config_dir():
return os.path.abspath(os.path.join(get_pkg_dir(), 'config')我认为这种方法比处理env变量更好。
https://stackoverflow.com/questions/23848492
复制相似问题