使用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 Variable | Python Import Statement | Python 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}$ |
示例
与烧瓶一起使用
用前缀定义环境变量:
$ 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"'
创建烧瓶应用程序并从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"'
创建龙卷风项目并加载配置:
$ 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并在VCS中将.env标记为忽略。为了 例如,如果使用git,则可以在.gitignore中写入/.env,并且 将.env.example作为新克隆项目的复制模板。
然后,可以使用诸如honcho或autoenv之类的实用程序来应用 自动地.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。