Python中如何实现配置项的全局应用
编写一个类或者方法,来读取配置文件,比如项目名称、版本、一些其他方法或类需要用的值。那么这些配置项如何在其他方法(文件)中使用?
Python中如何实现配置项的全局应用
存 json 或者 yml 然后读一下就好了。话说你这像面试人家给你留的作业
在Python里搞全局配置,最直接的就是用模块级变量。创建一个单独的config.py文件,里面定义你的配置项,然后在其他模块里import config就能用了。
# config.py
DATABASE_URL = "localhost:5432"
DEBUG = True
API_KEY = "your-api-key-here"
MAX_RETRIES = 3
# app.py
import config
def connect_to_db():
print(f"Connecting to {config.DATABASE_URL}")
if config.DEBUG:
print("Debug mode is ON")
def make_api_call():
headers = {"Authorization": f"Bearer {config.API_KEY}"}
# ... API调用逻辑
这方法简单粗暴,但有个问题:配置是硬编码的,改起来得动代码。更专业的做法是用环境变量或者配置文件(比如.env、config.ini、config.json)。
# 用python-dotenv处理.env文件
# 先安装:pip install python-dotenv
# .env文件内容:
# DATABASE_URL=localhost:5432
# DEBUG=True
# API_KEY=your-api-key-here
# config.py
import os
from dotenv import load_dotenv
load_dotenv() # 加载.env文件
DATABASE_URL = os.getenv("DATABASE_URL", "default_url")
DEBUG = os.getenv("DEBUG", "False").lower() == "true"
API_KEY = os.getenv("API_KEY")
MAX_RETRIES = int(os.getenv("MAX_RETRIES", "3"))
# app.py用法和之前一样
对于大型项目,可以考虑用类或字典来组织配置,甚至搞个配置管理器。但多数情况下,上面这两种方法够用了。
总结:小项目用模块变量,正经项目用环境变量加dotenv。
看 openstack 怎么做的~~~
介不是君哥吗,许久不见,O(∩_∩)O 哈哈~
哈哈哈,感觉我应该换个号了。
有时间去你那玩玩…(^▽^)
欢迎欢迎
看完这两篇你就应就知道了。
https://stackoverflow.com/questions/5055042/whats-the-best-practice-using-a-settings-file-in-python
https://martin-thoma.com/configuration-files-in-python/
我的看法:
1. yaml 不是一个好主意, 因为需要给项目引入额外的依赖。首先排除它。
2. 如果你只是需要配置一些全局的符号常量(symbolic constants), 参考 Django 的做法,使用 setting.py ,
参见: https://github.com/deis/example-python-django/blob/master/helloworld/settings.py
关于使用符号常量: https://constantly.readthedocs.io/en/latest/
3. 如果你只需要简单的一些键值对(key-value pairs), 可以使用 INI 文件,配置标准库的 configparser 进行解析。
4. 如果你需要更复杂的配置, 不妨使用 json.
2,3,4 我都用过。简单的一些,直接用了 settings.py 。有的项目配置文件超过 7000 行了, 用的 json。
是的,可以看看 OpenStack 的做法,具体就是 oslo.config 库。

