跳转到主要内容

使用魔法模块访问环境变量。

项目描述

使用魔法模块访问环境变量。

>>> 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体导入,如果失败则将其作为字符串导入。

以下是一个示例表

环境变量

Python导入语句

Python变量值

FOO_NAME=foo

envcfg.raw.foo.NAME

'foo'

FOO_NAME="foo"

envcfg.raw.foo.NAME

'"foo"'

FOO_NUM1=42

envcfg.raw.foo.NUM1

'42'

FOO_NUM1="42"

envcfg.raw.foo.NUM1

'"42"'

FOO_NAME=foo

envcfg.json.foo.NAME

ImportError

FOO_NAME="foo"

envcfg.json.foo.NAME

'foo'

FOO_NUM1=42

envcfg.json.foo.NUM1

42

FOO_NUM1="42"

envcfg.json.foo.NUM1

'42'

FOO_NAME=foo

envcfg.smart.foo.NAME

'foo'

FOO_NAME="foo"

envcfg.smart.foo.NAME

'foo'

FOO_NUM1=42

envcfg.smart.foo.NUM1

42

FOO_NUM1="42"

envcfg.smart.foo.NUM1

'42'

示例

与Flask一起使用

  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. 创建Flask应用并从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. 创建一个Tornado项目并加载配置

    $ 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中,并在您的版本控制系统中标记为忽略。例如,如果您使用Git,您可以在.gitignore中写入/.env,并将.env.example作为新克隆项目的复制模板。

然后,您可以使用一些实用程序,如honchoautoenv来自动应用.env

对于honcho

$ 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上创建问题。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

python-envcfg-0.2.0.tar.gz (5.4 kB 查看哈希)

上传时间

构建分发

python_envcfg-0.2.0-py2.py3-none-any.whl (9.0 kB 查看哈希)

上传时间 Python 2 Python 3

由以下机构支持