Vin*_*e M 7 python environment-variables visual-studio-code jupyter-notebook
我\xe2\x80\x99m 在 VsCode 上使用笔记本和 .env 文件处理 python 项目。\n尝试刷新笔记本中的环境变量时遇到问题(我找到了一种方法,但非常棘手)。
\n我的项目:
\n.env 文件包含:MY_VAR="HELLO_ALICE"
包含一个单元格的 test.ipynb 文件:
\nfrom os import environ\nprint(\'MY_VAR = \', environ.get(\'MY_VAR\'))\n
Run Code Online (Sandbox Code Playgroud)\n我想要的是:
\n什么不起作用:
\n>> set -a; source .env; set +a;
>> set -a; source .env; set +a;
与步骤2相同)所以我看到了两次 HELLO_ALICE,而不是 HELLO_ALICE,然后是 HELLO_BOB...
\n但如果它是在 .py 文件而不是笔记本上,它就会起作用(我会先看到 HELLO_ALICE,然后看到 HELLO_BOB)
\n为了使其发挥作用:
\n将步骤 5. 替换为:关闭 VsCode 并重新打开它
\n为什么这是一个问题:
\n这非常棘手。我确信 3 个月后我会通过快速修复忘记这个问题,最终我会再次失去半天的时间来找出问题所在和解决方案。
\n所以我的问题是:
\n有谁知道为什么它会这样工作以及如何避免关闭和重新打开 VsCode 来刷新存储在笔记本上 .env 文件中的 env 变量?
\n(关闭并重新打开 VsCode 不应改变代码的行为)
\n笔记:
\n小智 7
您在 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'))
Run Code Online (Sandbox Code Playgroud)
MY_VAR = HELLO_ALICE
MY_VAR = HELLO_BOB
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14066 次 |
最近记录: |