金字塔:如何避免将完整路径放入__init__.py中

时间:2014-08-05 16:26:21

标签: python path pyramid

我需要在主函数中提取配置文件:

def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """ 

    parser = SafeConfigParser()
    ret = parser.read('/var/www/finance/corefinance/database.ini')
    connstring = parser.get('postgres', 'connstring')
    settings['sqlalchemy.url'] = connstring

database.ini的位置比 init .py

的位置高一级

我以为我可以使用" ../ database.ini",但这不起作用。唯一有效的是投入整条道路。如何避免在此文件中放入完整路径?

3 个答案:

答案 0 :(得分:5)

当然,在 __ init __。py 中,你可以使用项目父目录的字符串表示来定义一个变量:

project_dir = '/var/www/finance/corefinance/'

但我相信你并没有要求SO得到这样的答案。


另一种方法是在 development.ini production.ini [app:main]部分添加类似于以下内容的内容:

project_dir = %(here)s/mycoolwebsite

或者甚至只是:

project_dir = %(here)s

然后在 __ init __。py (以及您要引用项目父目录的任何其他位置),您可以使用以下命令检索该值:

project_dir = config.registry.settings['project_dir']

有关自定义变量的详细信息,请参阅:http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html#adding-a-custom-setting

答案 1 :(得分:1)

如果你想将它作为参数传递,你当然可以使用argv并使用os.path解析路径

import os
import sys
...
path = os.path.abspath(sys.argv[1])
ret = parser.read(path)
...

答案 2 :(得分:1)

我终于根据@ tag的想法开始工作了:

def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """ 

    parser = SafeConfigParser()
    iniloc = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'database.ini'))
    read_list = parser.read(iniloc)
    connstring = parser.get('postgres', 'connstring')
    settings['sqlalchemy.url'] = connstring