我正在使用 VsCode 上的笔记本和 .env 文件开发一个 Python 项目。
我在尝试刷新笔记本中的环境变量时遇到问题(我找到了一种方法,但非常棘手)。
我的项目:
.env 文件包含:MY_VAR="HELLO_ALICE"
包含一个单元格的 test.ipynb 文件:
from os import environ
print('MY_VAR = ', environ.get('MY_VAR'))
我想要的是:
- 设置环境变量并运行我的笔记本(请参阅 HELLO_ALICE)
- 编辑 .env 文件:将“HELLO_ALICE”更改为“HELLO_BOB”
- 设置环境变量并运行我的笔记本(请参阅 HELLO_BOB)
什么不起作用:
- 在 vsCode 中打开我的项目,打开终端
- 在终端运行:
>> set -a; source .env; set +a;
- 打开笔记本,运行单元 --> 我看到 HELLO_ALICE
- 编辑 .env(将 HELLO_ALICE 更改为 HELLO_BOB)
- 重新启动笔记本(单击重新启动或关闭选项卡并重新打开它)
- 在终端运行:
>> set -a; source .env; set +a;
(与步骤2相同)
- 打开笔记本,运行单元 --> 我看到 HELLO_ALICE
所以我看到了两次 HELLO_ALICE,而不是 HELLO_ALICE,然后是 HELLO_BOB...
但如果它是在 .py 文件而不是笔记本上,它就会起作用(我会先看到 HELLO_ALICE,然后看到 HELLO_BOB)
为了使其发挥作用:
将步骤 5. 替换为:关闭 VsCode 并重新打开它
为什么这是一个问题:
这非常棘手。我确信 3 个月后我会通过快速修复忘记这个问题,最终我会再次失去半天的时间来找出问题所在和解决方案。
所以我的问题是:
有谁知道为什么它会这样工作以及如何避免关闭并重新打开 VsCode 来刷新存储在笔记本上 .env 文件中的 env 变量?
(关闭并重新打开 VsCode 不应改变代码的行为)
Notes:
- VsCode 版本 = 1.63.2
- 我厌倦了在笔记本中使用 dotenv 模块并加载 env 变量(不起作用)
- 问题:如何在 Jupyter 笔记本中设置 env 变量 https://stackoverflow.com/questions/37890898/how-to-set-env-variable-in-jupyter-notebook仅当您在笔记本中定义环境变量时才有效
- 此行为仅发生在环境变量上。例如,如果我使用 env.py 文件代替 .env 文件,其中我将 env 常量定义为 python 变量,则重新启动笔记本将刷新常量。
您在 VSC 中打开的终端与运行 ipython 内核的终端不同。内核已经在不受您在另一个终端中更改变量影响的环境中运行。您需要在正确的环境中设置变量。你可以这样做dotenv
,但请记住使用override=True
。
这似乎有效:
import dotenv
from os import environ
env_file = '../.env'
f = open(env_file,'w')
f.write('MY_VAR="HELLO_ALICE"')
f.close()
dotenv.load_dotenv(env_file, override=True)
print('MY_VAR = ', environ.get('MY_VAR'))
f = open(env_file,'w')
f.write('MY_VAR="HELLO_BOB"')
f.close()
dotenv.load_dotenv(env_file, override=True)
print('MY_VAR = ', environ.get('MY_VAR'))
MY_VAR = HELLO_ALICE
MY_VAR = HELLO_BOB
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)