gpt4 book ai didi

python - 将项目配置存储在环境变量中是一种不好的做法吗?

转载 作者:太空宇宙 更新时间:2023-11-03 19:43:21 24 4
gpt4 key购买 nike

首先介绍一些背景:我目前正在测试一个类,该类发送带有可配置 url 的 GET 请求,其构建方式如下

url = f"{os.environ["TARGET_URL"]}/api/etc"

对于正常操作,我的 TARGET_URL 环境变量是在项目启动时从 .env 文件设置的,一切正常。在本地测试时,一切都还好,测试通过,每个人都很高兴。当我发现我的 Drone CI 服务器由于找不到 TARGET_URL 环境变量而无法完成项目的构建时,我的问题就出现了。

经过一番挖掘,我发现我有一个错误(愚蠢)的想法,即在每个项目/测试启动时都会重置环境变量,而且我基本上一直在使用我的生产环境变量(即使在测试期间),因为它是在第一次项目启动时设置。

从这个故事中引出了我的问题:鉴于环境变量在执行之间保留,在其中存储配置是否会导致不良实践?是否有一个同样方便的替代方案(没有全局对象并且可以从代码中的任何地方进行访问)可以替代?

最佳答案

感谢大家的快速回复,以下是接下来发生的一些事情:

环境变量在第一次初始化后保持加载状态,因此我需要一种方法在仅加载我需要的变量和预期值后测试我的代码。这将允许我继续使用从 .env 文件加载的环境变量,并继续远程构建我的项目,其中不存在 .env 文件。

解决方案是添加一个名为 pytest-dotenv 的 pytest 插件,正确配置后,我可以使用另一个文件中的自定义变量(在我的例子中为 .env.test)覆盖 .env 文件中的每个变量。我用 .env 文件中找到的所有变量填充了 .env.test 文件,并为每个变量分配了空值。这使得我的测试能够运行,确保不会因为某些值错误而错过任何奇怪的边缘情况。

示例 .env 文件

TARGET_URL="http://my.api.dev

示例 .env.test 文件

TARGET_URL=

pytest.ini配置

[pytest]
env_override_existing_values = 1
env_files =
.env.test

关于python - 将项目配置存储在环境变量中是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60299225/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com