Python 如何在 dev、test、prod 中注入不同的环境变量
How to inject different environment variable in dev, test, prod in Python
我曾经使用 Flask,它提供了一种在不同模式下配置应用程序的简单方法 运行。 (开发、测试、生产……)
class BaseConfig:
MY_PATH = "Something"
class DevelopmentConfig(BaseConfig):
MY_PATH = "Something else"
# ...
我正在尝试构建类似但不使用 Flask 的东西。这是我能找到的最简单代码的结构:
-src
- main.py
- zip2h5
- __init__.py
- foo.py
-test
- __init__.py
- test_foo.py
对象 Foo.py
有一个方法 path
,在开发模式下输出 "path/to/dev",在测试模式下输出 "path/to/test"。在代码中编写 if
语句会很混乱并且很难正确测试。使用环境变量似乎好多了。如何以及在哪里设置 Flask 所做的配置?
# foo.py
class Foo():
def __init__(self, name):
self.name = name
def path(self):
return "path/in/dev"
# test_foo.py
class TestFoo(unittest.TestCase):
def test_path(self):
boo = Foo("Boo")
expected = "path/in/test"
self.assertEquals(boo.path(), expected)
请不要告诉我我可以修补该方法。正如我所说,这只是一个例子。
您的进程的环境可通过 os module。
您可以简单地为开发和测试用例中的路径注入不同的环境变量。我不确定你的 运行 测试如何,但通常你可以做类似 PATH='path/in/test' tests.sh
的事情来完成你需要的。
我使用 dotenv 并在我的项目根目录中保留 .env
文件来管理它。我有一个基础测试 class,它加载 .env.test
而不是 .env
来测试配置。
像 Flask 那样做。有多个 Config 类,然后将 env 作为参数传递,例如
class Foo():
def __init__(self, name, env):
self.name = name
self.env = env
def path(self):
if self.env == 'TEST':
#initialize TestConfig class here
return TestConfigPath
test_foo.py
class TestFoo(unittest.TestCase):
def test_path(self):
boo = Foo("Boo")
expected = "path/in/test"
self.assertEquals(boo.path(), expected)
我曾经使用 Flask,它提供了一种在不同模式下配置应用程序的简单方法 运行。 (开发、测试、生产……)
class BaseConfig:
MY_PATH = "Something"
class DevelopmentConfig(BaseConfig):
MY_PATH = "Something else"
# ...
我正在尝试构建类似但不使用 Flask 的东西。这是我能找到的最简单代码的结构:
-src
- main.py
- zip2h5
- __init__.py
- foo.py
-test
- __init__.py
- test_foo.py
对象 Foo.py
有一个方法 path
,在开发模式下输出 "path/to/dev",在测试模式下输出 "path/to/test"。在代码中编写 if
语句会很混乱并且很难正确测试。使用环境变量似乎好多了。如何以及在哪里设置 Flask 所做的配置?
# foo.py
class Foo():
def __init__(self, name):
self.name = name
def path(self):
return "path/in/dev"
# test_foo.py
class TestFoo(unittest.TestCase):
def test_path(self):
boo = Foo("Boo")
expected = "path/in/test"
self.assertEquals(boo.path(), expected)
请不要告诉我我可以修补该方法。正如我所说,这只是一个例子。
您的进程的环境可通过 os module。
您可以简单地为开发和测试用例中的路径注入不同的环境变量。我不确定你的 运行 测试如何,但通常你可以做类似 PATH='path/in/test' tests.sh
的事情来完成你需要的。
我使用 dotenv 并在我的项目根目录中保留 .env
文件来管理它。我有一个基础测试 class,它加载 .env.test
而不是 .env
来测试配置。
像 Flask 那样做。有多个 Config 类,然后将 env 作为参数传递,例如
class Foo():
def __init__(self, name, env):
self.name = name
self.env = env
def path(self):
if self.env == 'TEST':
#initialize TestConfig class here
return TestConfigPath
test_foo.py
class TestFoo(unittest.TestCase):
def test_path(self):
boo = Foo("Boo")
expected = "path/in/test"
self.assertEquals(boo.path(), expected)