在之前的文章公众号:开发心得:如何正确设置开发环境和生产环境的配置参数中,我提到了项目开发环境和生产environment配置文件是这样单独管理的。其实项目的配置信息,除了使用配置文件,还可以使用环境变量来设置。对于一些项目,他们不会在配置文件中设置敏感信息,因为他们害怕不小心将敏感信息发送到Github。相反,将所有敏感信息设置到环境变量中。该代码直接从环境变量中读取此信息。在Python中,读取环境变量非常简单:importosvalue=os.getenv('变量名')假设有一个项目在运行时需要连接Redis/MongoDB/Kafka/ElasticSearch。有五十或六十条配置信息。然后,它可能需要设置很多环境变量,像下面这样:环境变量设置好后,每次启动时只需要直接运行程序代码就可以了。当你在开发机器上运行它时,它会自动连接到开发环境;当您在生产环境中运行它时,它会自动连接到生产环境。但缺点也很明显。如果有多个环境,每次都要重新修改环境变量,非常麻烦。一般来说,只有一个生产环境,但是你也有开发环境,测试环境,staging环境……。其中不能获取生产环境的配置参数,但是可以获取其他几个环境的参数。假设你现在的代码在开发机上运行正常,但是放到测试环境中就失败了。然后你想在开发机上使用测试环境的参数来调试代码。这时候就得一个一个重新设置环境变量,很麻烦。但幸运的是,Python已经有了一个第三方库python-dotenv[1]来管理项目环境变量。该库使用起来非常简单,只需要两行代码和一个文件。首先,在项目的根目录中创建一个名为.env的文件。使用Windows的同学可能做不到,因为Windows没有办法用正常的方法创建一个点开头的文件。但是linux和macOS是可以正常创建的。例如:NAME=kingnameSALARY=9999999ADDRESS=Shanghai然后,在工程入口文件的最上方添加两行代码,如下图:fromdotenvimportload_dotenvload_dotenv()这样就完成了。读取环境变量不需要对原来的代码做任何改动,直接读取环境变量即可,如下图所示:从图中可以看出,当我们直接执行echo$变量名时Shell,显示为空,说明没有设置环境变量。当我们运行项目代码时,python-dotenv会自动读取.env文件,然后在项目中设置环境变量。如果只是为了读取文件,那我当然不会专门介绍了。它还具有两个更有用的功能。如果环境变量已经存在,则以已经存在的环境变量为准,.env中对应的项自动失效:也就是说,你甚至可以直接将这个.env文件上传到生产环境。由于生产环境已经设置了相应的配置参数,.env文件中的内容会自动失效。第二个有用的功能是可以在.env中重复使用相同的变量。比如我的项目有个域名,会在多个地方使用:EMAIL=contact@kingname.infoENTRYPOINT=https://kingname.info/apiREDIS_HOST=redis.kingname.infoKAFKA_SERVER=kafka.kingname.info...if任何一天我要修改这个域名,那么所有的配置都需要修改。但是.env可以重用变量:DOMAIN=kingname.infoEMAIL=contact@${DOMAIN}ENTRYPOINT=https://${DOMAIN}/apiREDIS_HOST=redis.${DOMAIN}KAFKA_SERVER=kafka.${DOMAIN},当我想要的时候要更改域名,我只需要修改DOMAIN的值即可。有关使用python-dotenv的更多说明,您可以阅读参考文档中的Readme。参考文献[1]python-dotenv:https://github.com/theskumar/python-dotenv
