使用magic模块访问环境变量。

python-envcfg的Python项目详细描述


使用magic模块访问环境变量。

>>> import os
>>> from envcfg.raw.python import CONFIGURE_OPTS
>>>
>>> CONFIGURE_OPTS
'--enable-shared --enable-universalsdk=/ --with-universal-archs=intel'
>>> CONFIGURE_OPTS == os.environ['PYTHON_CONFIGURE_OPTS']
True

它可以与很多框架一起工作,比如django和flask。然后你可以把你的 在环境变量中配置,而不是在特定于框架的配置文件中配置。 由12-Factor推荐。

安装

$ pip install python-envcfg

支持的格式

  • import envcfg.raw.foo as config: 将每个FOO_*环境变量作为字符串导入。
  • import envcfg.json.foo as config: 将每个FOO_*环境变量导入为json主体。
  • import envcfg.smart.foo as config: 尝试将每个FOO_*环境变量导入为json主体,如果失败,则将其导入为字符串。

有一个示例表:

Environment VariablePython Import StatementPython Variable Value
^{tt7}$^{tt8}$^{tt9}$
^{tt10}$^{tt8}$^{tt12}$
^{tt13}$^{tt14}$^{tt15}$
^{tt16}$^{tt14}$^{tt18}$
^{tt7}$^{tt20}$ImportError
^{tt10}$^{tt20}$^{tt9}$
^{tt13}$^{tt25}$^{tt26}$
^{tt16}$^{tt25}$^{tt15}$
^{tt7}$^{tt31}$^{tt9}$
^{tt10}$^{tt31}$^{tt9}$
^{tt13}$^{tt37}$^{tt26}$
^{tt16}$^{tt37}$^{tt15}$

示例

与烧瓶一起使用

  1. 用前缀定义环境变量:

    $ cat .env  # should not checked into VCS
    # values are valid JSON expressions
    MYAPP_DEBUG=true
    MYAPP_SECRET_KEY='"7950ad141c7e4b3990631fcdf9a1d909"'
    MYAPP_SQLALCHEMY_DATABASE_URI='"sqlite:///tmp/myapp.sqlite3"'
    
  2. 创建烧瓶应用程序并从python envcfg加载配置:

    $ cat myapp.py
    ...
    app = Flask(__name__)
    app.config.from_object('envcfg.json.myapp')  # MYAPP_ -> .myapp
    ...
    
  3. 使用这些环境变量输入应用程序:

    $ env $(cat .env | xargs) python myapp.py
    

与django一起使用

  1. 创建一个django项目并将所有敏感的配置项移到 环境变量:

    $ cat djapp/settings.py  # codebase-scope config
    ...
    INSTALLED_APPS = (
        'django.contrib.admin',
    )
    ...
    
    $ cat .env  # environment-scope config, should not checked into VCS
    # values are valid JSON expressions
    DJAPP_SECRET_KEY='"wo9g2o#jws=u"'
    DJAPP_DEBUG=true
    DJAPP_TEMPLATE_DEBUG=true
    
  2. settings.py模块末尾添加导入语句:

    $ tail -n 2 djapp/settings.py
    # importing all config items stored in the environment variables
    from envcfg.json.djapp import *  # noqa
    
  3. 使用环境变量运行django应用程序:

    $ env $(cat .env | xargs) python manage.py runserver
    

与Tornado一起使用

  1. 用前缀定义环境变量:

    $ cat .env
    export TORAPP_PORT='8888'
    export TORAPP_MYSQL_HOST='"127.0.0.1"'
    export TORAPP_MYSQL_DATABASE='"database"'
    
  2. 创建龙卷风项目并加载配置:

    $ cat torapp/server.py
    
    from tornado.web import Application, RequestHandler
    from tornado.ioloop import IOLoop
    from tornado.options import define, options
    from tordb import Connection
    
    
    def options_from_object(*args, **kwargs):
        module = __import__(*args, **kwargs)
        for name, value in vars(module).items():
            name = name.lower()
            if name in options._options:
                options._options[name].set(value)
    
    
    class IndexHandler(RequestHandler):
        def initialize(self):
            self.db = Connection(options.mysql_host, options.mysql_database)
    
        def get(self):
            pass  # some database operations with ``self.db``
    
    
    application = Application([
        (r'/', IndexHandler),
    ])
    
    define('port', type=int)
    define('mysql_host', type=unicode)
    define('mysql_database', type=unicode)
    options_from_object('envcfg.json.torapp', fromlist=['torapp'])
    
    
    if __name__ == '__main__':
        application.listen(options.port)
        IOLoop.instance().start()
    
  3. 运行您的Tornado应用程序:

    $ env $(cat .env | xargs) python server.py
    

在项目中工作

在开发过程中,我们可以使用每个项目的环境,但不再键入 source foo/bar

我建议将项目指定的环境变量放入 {PROJECT_ROOT}/.env并在VCS中将.env标记为忽略。为了 例如,如果使用git,则可以在.gitignore中写入/.env,并且 将.env.example作为新克隆项目的复制模板。

然后,可以使用诸如honchoautoenv之类的实用程序来应用 自动地.env

对于本周:

$ echo 'MYPROJECT_DEBUG=true' >> .env
$ echo 'web: python manage.py runserver' >> Procfile
$ honcho run python manage.py check-debug
True
$ honcho start web
Starting development server at http://127.0.0.1:5000/
...

对于autoenv:

$ echo 'MYPROJECT_DEBUG=true' >> myproject/.env
$ cd myproject
$ python manage.py check-debug
True
$ python manage.py runserver
Starting development server at http://127.0.0.1:5000/
...

问题

如果要报告错误或请求功能,请在 GitHub Issues

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
字符串Java字母替换无效   java Spring Roo JPA MS SQL Server无法打开JPA EntityManager组织。冬眠例外GenericJDBCException:无法打开连接   在scala中使用JavaWS对大型数据文件进行java流式处理   Java编译器是否将字节和短字符识别为文本?   java无法查找符号错误,空指针   mongodb在Java中重用数据库连接   java将多个StringArray从字符串文件获取到活动中   java是一个变量,它只保存最后一次鼠标单击的坐标   c#尺寸有限;添加、删除和洗牌   java如何在Android中显示来自资产文件夹的文本文件中的文本   Android应用程序中的java Tensorflow Lite自定义对象检测模型错误   java如何在foreachloop中使用scanner将来自命令行的输入存储到数组中   java如何定义一个好的存储库接口   Android中的java解析动态json对象