使用魔法模块访问环境变量。
项目描述
使用魔法模块访问环境变量。
>>> 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一起使用
定义带有前缀的环境变量
$ 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"'
创建Flask应用并从python-envcfg加载配置
$ cat myapp.py ... app = Flask(__name__) app.config.from_object('envcfg.json.myapp') # MYAPP_ -> .myapp ...
使用这些环境变量进入您的应用
$ env $(cat .env | xargs) python myapp.py
与Django一起使用
创建一个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
在settings.py模块的末尾添加导入语句
$ tail -n 2 djapp/settings.py # importing all config items stored in the environment variables from envcfg.json.djapp import * # noqa
使用环境变量运行您的Django应用程序
$ env $(cat .env | xargs) python manage.py runserver
与Tornado一起使用
定义带有前缀的环境变量
$ cat .env export TORAPP_PORT='8888' export TORAPP_MYSQL_HOST='"127.0.0.1"' export TORAPP_MYSQL_DATABASE='"database"'
创建一个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()
运行您的Tornado应用程序
$ env $(cat .env | xargs) python server.py
适用于项目
在开发过程中,我们可以使用每个项目的环境,但不再需要输入source foo/bar。
建议将项目特定的环境变量放在{PROJECT_ROOT}/.env中,并在您的版本控制系统中标记为忽略。例如,如果您使用Git,您可以在.gitignore中写入/.env,并将.env.example作为新克隆项目的复制模板。
然后,您可以使用一些实用程序,如honcho或autoenv来自动应用.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的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7b5d8617ec39d62306af073ea1f2dfe7be5c60e6aa9d725899d15d023a0946ff |
|
MD5 | 5006237e58bdd6297f38d59dc3a5b1cb |
|
BLAKE2b-256 | fc7d892061b11030a210d3341354d67143417dcac6757d711583e9c463787e05 |
python_envcfg-0.2.0-py2.py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 427e02e795536eb9564bd94e4ae79e0e6b9d425c3cd19832a1470d57b922d58e |
|
MD5 | 3c87d10fda922cddca2828edb2e761ed |
|
BLAKE2b-256 | 8c453aa2ef6954e6f6d135ca468ee6d2ce57f97a322b315f33d96b6fa0b345a3 |