百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python项目中正确读取写入配置的方式

off999 2024-10-10 07:54 62 浏览 0 评论

Python项目中正确读取写入配置的方式

1. 将配置写在Python文件中

这种方法非常简单,但它存在严重的安全问题,我们都知道不应该把配置写在代码中,如果有人把我们的源代码上传到了github中,那么数据库的配置就相当于向全世界公开了,当然,当配置文件不包含敏感信息时,也可以才有这种简单的方法。

2. 利用外部配置文件

让配置文件和代码独立开来,通常使用 json、yaml或者ini的文件格式来存储配置。

结合环境变量和 python 库读取外部文件,首先开发通常不会接触到生成环境,因此生成环境的配置文件由运维来写,运维将应用所需要的配置写好后,放到生产服务器的指定位置,代码从指定位置读取配置。

为了方便程序的统一调试,可以提前约定好一个系统环境变量(XXX_CONFIG_PATH)来指定配置文件的存放路径。

例如:export XXX_CONFIG_PATH = /home/test/configs/config.ini 此为设置临时环境变量

linux、ubuntu 环境变量

 查看环境变量:
 env
 设置永久环境变量
 1.在/etc/profile 的文件下编辑,所改变的环境变量是面向所有用户的
 export CLASSPATH = /../...  该路径为绝对路径
 
 2.在当前用户目录下./barsh_profile文件中修改 进行修改的话,仅对当前的用户生效
 vim /home/wens/.barshc
 export CLASSPATH = /../...  该路径为绝对路径
 
 最后使用source命令 可以直接使环境变量生效
 source  /home/wens/.barshc //直接跟环境变量的文件

windows 环境变量

 查看环境变量:
 set
 查看某个环境变量:
 set path
 修改环境变量
 输入 “set 变量名=变量内容”即可。比如将path设置为“d:\nmake.exe”,只要输入set path="d:\nmake.exe"
 
 注意:所有的在cmd命令行下对环境变量的修改只对当前窗口有效,不是永久性的修改。也就是说当关闭此cmd命令行窗口后,将不再起作用。
 永久性修改环境变量的方法有两种:
   一种是直接修改注册表
   另一种是通过我的电脑-〉属性-〉高级,来设置系统的环境变量(查看详细)
   
 设置了环境变量后,需要重启 pycharm 生效

3. 直接使用系统环境变量读取配置

此方法不使用文件来存储配置信息,将所有的配置信息存储到环境变量中,在实践中比较常见,运维通过 ansible 部署脚本,在程序运行前将需要配置的信息导入到环境变量中。

不利用文件存储,在一定程度上加强了对密码等配置信息的保护,但也增加了运维的工作量,尤其是当需要修改配置时。

4. 微服务架构

在一些微服务架构中,会专门开发配置中心,程序直接从线上读取配置,配置的管理也会开发一套GUI,方便开发和运维。

5. 一般项目中建议的配置方式

 -app
  -__init.py
  -app.py
  -settings
   -__init__.py
   -base.py
   -dev.py
   -prod.py

其中 __init__.py 中,添加判断逻辑,判断当前环境使用 开发环境还是生产环境,从而加载不同的配置参数

 # settings/__init__.py
 import os
 
 # os.environ.get() 用于获取系统中的环境变量,因为在生产环境中,一般都会把一些关键性的参数写到系统的环境中。
 # 所以PROFILE的值其实就是我们配置的环境变量的值。如果没有配这个值,默认走dev的配置。
 # PYTHON_PRO_PROFILE = os.environ.get("PYTHON_PRO_PROFILE", "dev")
 PYTHON_PRO_PROFILE = os.environ.get("PYTHON_PRO_PROFILE")
 print("是开发环境还是生产环境: ", PYTHON_PRO_PROFILE)
 
 if PYTHON_PRO_PROFILE == "dev":
     from .dev import *
 elif PYTHON_PRO_PROFILE == "prod":
     from .prod import *
 else:
     raise Exception("Not supported runtime profile {}".format(PYTHON_PRO_PROFILE))

其中 base.py 存储一些公用的配置,然后在开发环境 dev.py 与生产环境 prod.py 中导入 base.py 的变量。

 # settings/base.py
 import os
 import time
 
 # os.path.abspath: 获取完整路径(包含文件名)
 current_exec_abspath = os.path.abspath(__file__)
 current_exec_dir_name, _ = os.path.split(current_exec_abspath)
 current_up_dir, _ = os.path.split(current_exec_dir_name)
 current_up2_dir, _ = os.path.split(current_up_dir)
 print('------log dir=------', current_up2_dir)
 
 # 日志文件路径设置
 log_path = f"{current_up2_dir}/logs"
 if not os.path.exists(log_path):
     os.makedirs(log_path)
 t = time.strftime("%Y_%m_%d")
 log_path_file = f"{log_path}/interface_log_{t}.log"

其中 dev.py

 # 导入了base下所有参数
 from .base import *
 
 database = {
     "protocol": "mysql+mysqlconnector",
     "username": "xxxxxx",
     "password": "hash string",
     "port": 3306,
     "database": "repo"
 }

其中 prod.py

 # 导入了base下所有参数
 from .base import *
 
 database = {
     "protocol": "xxxxxxxxxxx",
     "username": "xxxxxxxxxxx",
     "password": "xxxxxxxxxxx",
     "port": 3344,
     "database": "xxxx"
 }
 对于一些敏感信息可在环境变量里设置,通过如下方法获取,例如:
 MAIL_SERVER = os.environ.get('MAIL_SERVER', 'smtp.163.com') 
 MAIL_USERNAME = os.environ.get('MAIL_USERNAME') or 'test'
 MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD') or '12345678'

相关推荐

大文件传不动?WinRAR/7-Zip 入门到高手,这 5 个技巧让你效率翻倍

“这200张照片怎么传给女儿?微信发不了,邮箱附件又超限……”62岁的张阿姨对着电脑犯愁时,儿子只用了3分钟就把照片压缩成一个文件,还教她:“以后用压缩软件,比打包行李还方便!”职场人更懂这...

电脑解压缩软件推荐——7-Zip:免费、高效、简洁的文件管理神器

在日常工作中,我们经常需要处理压缩文件。无论是下载软件包、接收文件,还是存储大量数据,压缩和解压缩文件都成为了我们日常操作的一部分。而说到压缩解压软件,7-Zip绝对是一个不可忽视的名字。今天,我就来...

设置了加密密码zip文件要如何打开?这几个方法可以试试~

Zip是一种常见的压缩格式文件,文件还可以设置密码保护。那设置了密码的Zip文件要如何打开呢?不清楚的小伙伴一起来看看吧。当我们知道密码想要打开带密码的Zip文件,我们需要用到适用于Zip格式的解压缩...

大文件想要传输成功,怎么把ZIP文件分卷压缩

不知道各位小伙伴有没有这样的烦恼,发送很大很大的压缩包会受到限制,为此,想要在压缩过程中将文件拆分为几个压缩包并且同时为所有压缩包设置加密应该如何设置?方法一:使用7-Zip免费且强大的文件管理工具7...

高效处理 RAR 分卷压缩包:合并解压操作全攻略

在文件传输和存储过程中,当遇到大文件时,我们常常会使用分卷压缩的方式将其拆分成多个较小的压缩包,方便存储和传输。RAR作为一种常见的压缩格式,分卷压缩包的使用频率也很高。但很多人在拿到RAR分卷...

2个方法教你如何删除ZIP压缩包密码

zip压缩包设置了加密密码,每次解压文件都需要输入密码才能够顺利解压出文件,当压缩包文件不再需要加密的时候,大家肯定想删除压缩包密码,或是忘记了压缩包密码,想要通过删除操作将压缩包密码删除,就能够顺利...

速转!漏洞预警丨压缩软件Winrar目录穿越漏洞

WinRAR是一款功能强大的压缩包管理器,它是档案工具RAR在Windows环境下的图形界面。该软件可用于备份数据,缩减电子邮件附件的大小,解压缩从Internet上下载的RAR、ZIP及其它类...

文件解压方法和工具分享_文件解压工具下载

压缩文件减少文件大小,降低文件失效的概率,总得来说好处很多。所以很多文件我们下载下来都是压缩软件,很多小伙伴不知道怎么解压,或者不知道什么工具更好,所以今天做了文件解压方法和工具的分享给大家。一、解压...

[python]《Python编程快速上手:让繁琐工作自动化》学习笔记3

1.组织文件笔记(第9章)(代码下载)1.1文件与文件路径通过importshutil调用shutil模块操作目录,shutil模块能够在Python程序中实现文件复制、移动、改名和删除;同时...

Python内置tarfile模块:读写 tar 归档文件详解

一、学习目标1.1学习目标掌握Python内置模块tarfile的核心功能,包括:理解tar归档文件的原理与常见压缩格式(gzip/bz2/lzma)掌握tar文件的读写操作(创建、解压、查看、过滤...

使用python展开tar包_python拓展

类Unix的系统,打包文件经常使用的就是tar包,结合zip工具,可以方便的打包并解压。在python的标准库里面有tarfile库,可以方便实现生成了展开tar包。使用这个库最大的好处,可能就在于不...

银狐钓鱼再升级:白文件脚本化实现GO语言后门持久驻留

近期,火绒威胁情报中心监测到一批相对更为活跃的“银狐”系列变种木马。火绒安全工程师第一时间获取样本并进行分析。分析发现,该样本通过阿里云存储桶下发恶意文件,采用AppDomainManager进行白利...

ZIP文件怎么打开?2个简单方法教你轻松搞定!

在日常工作和生活中,我们经常会遇到各种压缩文件,其中最常见的格式之一就是ZIP。ZIP文件通过压缩数据来减少文件大小,方便我们进行存储和传输。然而,对于初学者来说,如何打开ZIP文件可能会成为一个小小...

Ubuntu—解压多个zip压缩文件.zip .z01 .z02

方法将所有zip文件放在同一目录中:zip_file.z01,zip_file.z02,zip_file.z03,...,zip_file.zip。在Zip3.0版本及以上,使用下列命令:将所有zi...

如何使用7-Zip对文件进行加密压缩

7-Zip是一款开源的文件归档工具,支持多种压缩格式,并提供了对压缩文件进行加密的功能。使用7-Zip可以轻松创建和解压.7z、.zip等格式的压缩文件,并且可以通过设置密码来保护压缩包中的...

取消回复欢迎 发表评论: