在 VsCode 中更新笔记本上的环境变量

2024-04-23

我正在使用 VsCode 上的笔记本和 .env 文件开发一个 Python 项目。 我在尝试刷新笔记本中的环境变量时遇到问题(我找到了一种方法,但非常棘手)。

我的项目:

.env 文件包含:MY_VAR="HELLO_ALICE"

包含一个单元格的 test.ipynb 文件:

from os import environ
print('MY_VAR = ', environ.get('MY_VAR'))

我想要的是:

  1. 设置环境变量并运行我的笔记本(请参阅 HELLO_ALICE)
  2. 编辑 .env 文件:将“HELLO_ALICE”更改为“HELLO_BOB”
  3. 设置环境变量并运行我的笔记本(请参阅 HELLO_BOB)

什么不起作用:

  1. 在 vsCode 中打开我的项目,打开终端
  2. 在终端运行:>> set -a; source .env; set +a;
  3. 打开笔记本,运行单元 --> 我看到 HELLO_ALICE
  4. 编辑 .env(将 HELLO_ALICE 更改为 HELLO_BOB)
  5. 重新启动笔记本(单击重新启动或关闭选项卡并重新打开它)
  6. 在终端运行:>> set -a; source .env; set +a;(与步骤2相同)
  7. 打开笔记本,运行单元 --> 我看到 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(使用前将#替换为@)

在 VsCode 中更新笔记本上的环境变量 的相关文章

随机推荐

  • 电话号码的 jQuery 输入掩码

    我希望用户的输入自动填充电话号码的标点符号 以便看起来像这样 xxx xxx xxxx 这是我的 HTML 代码 div class form group div
  • UIManagedDocument 迁移数据模型

    我正在开发一个 iPhone 应用程序 它使用UIManagedDocument并将其文档存储在 iCloud 上 一切都工作正常 直到我更改了我的核心数据模型 方案 添加了新的模型版本 就像我在过去几周内多次所做的那样 我添加了一个新属性
  • 如何使用python Bottle框架获取客户端IP地址

    我需要使用 python 的客户端 IP 地址 我已经尝试过下面的代码 但它在服务器中不起作用 from socket import gethostname gethostbyname ip gethostbyname gethostnam
  • 任务并行不稳定,有时使用 100% CPU

    我目前正在测试 C 的 Parallel 一般来说 它工作得很好 并且使用并行比普通的 foreach 循环更快 然而 有时 比如五分之一 我的 CPU 会达到 100 使用率 导致并行任务非常慢 我的 CPU 设置是 i5 4570 和
  • R:评估字符串

    事实证明需要定义一个函数eval string它评估一个字符串 就像它是一个表达式 调用 一样 例如 如果 string lt cyl 6 disp gt 200 我想要 eval string string mtcars 相当于 eval
  • 捕获 json.net 序列化错误

    我正在使用 dotnet core 2 2 开发 Web api 我们希望捕获序列化异常并返回 400 badRequest 以与验证错误 422UnprocessableEntity 区分开 我们尝试创建一个异常处理程序 public v
  • Spring data JPA和hibernate分离实体传递以持久化ManyToMany关系

    我正在尝试保留一个与已保留的其他对象具有多对多关系的对象 这是我的持久化对象 它们已经持久化在数据库中 这是一个 MySql Product Entity Table name PRODUCT public class Product pr
  • Mat-table 排序演示不起作用

    我正在尝试获取mat table排序在本地工作 虽然我可以让数据按预期显示 但单击标题行不会像在线示例那样进行排序 根本没有发生任何事情 我正在尝试让这个演示在本地运行 https material angular io component
  • 仅当通过 AWS CLI 调用 Lambda 时,目标才有效

    我有一个 hello world 测试 Lambda 配置为 触发 API网关 目的地 亚马逊 SQS 一个队列表示成功 另一个队列表示失败 import json def lambda handler event context prin
  • 如何在flyway创建的postgresql jdbc连接上设置时区?

    我有一个 postgresql 数据库 我使用 Flyway 将脚本部署到该数据库 我使用 Maven Flyway 插件启动针对目标数据库的数据库构建 在该构建中 我有一些脚本可以执行以下操作 create table my table
  • 在 OpenGL 中移动相机时出现故障

    我正在为 iPhone 编写一个基于图块的游戏引擎 除了以下故障之外 它基本上可以正常工作 基本上 相机将始终将玩家保持在屏幕中央 并且它会移动以正确跟随玩家并在静止时正确绘制所有内容 然而 当玩家移动时 玩家行走的表面瓷砖会出现故障 如下
  • Rails 嵌套单一资源路由

    我有一个简单的用户模型 带有单个嵌套的配置文件资源 因此在我的routes rb 中我有 resources users do resource profile only gt edit update show end 这会生成预期的路线
  • Octave/Matlab:向向量添加新元素

    有一个向量x我必须添加一个元素 newElem 有什么区别吗 x end 1 newElem and x x newElem x end 1 newElem更稳健一些 x x newElem 仅当x是行向量 如果它是列向量x x newEl
  • 删除方法二叉搜索树

    我正在尝试为我一直在研究的 BST 结构实现一个删除方法 下面是查找 插入和删除方法的代码 public class BST BSTNode root new BSTNode root public void insert BSTNode
  • 如何在 android dexDebug 或 dexRelease 任务之后执行 gradle 任务

    我想在 android 构建过程中在 dexRelease 或 dexDebug 任务之后运行 Gradle 任务来执行一些 shell 脚本 我尝试过以下方法 task taskAfterDex type Exec workingDir
  • AVD 硬件按钮未启用

    I just downloaded and installed the new Android SDK When I start the emulator on the emulator screen it says Hardward Bu
  • 广播接收器在 android oreo 中不工作

    我的广播接收器无法在奥利奥上工作 但它在奥利奥下工作 工作正常 我对此进行了很多搜索 但找不到合适的解决方案 有没有人遇到同样的问题 这是我的关于已实现广播的服务的代码 请建议我如何在奥利奥中工作 这是班级 public int onSta
  • Android开发-SQLite存储float

    当我存储浮点值 widt SQLiteDatabase insert 时 存储的值将与原始值不同 请参见下文 我有一个数据库宽度 db execSQL CREATE TABLE IF NOT EXISTS info values BaseC
  • 如何防止 Angular 2 站点上的浏览器缓存?

    我们目前正在开发一个定期更新的新项目 我们的一位客户每天都在使用该项目 这个项目是使用 Angular 2 开发的 我们面临着缓存问题 也就是说我们的客户在他们的机器上看不到最新的更改 主要是 js 文件的 html css 文件似乎得到了
  • 在 VsCode 中更新笔记本上的环境变量

    我正在使用 VsCode 上的笔记本和 env 文件开发一个 Python 项目 我在尝试刷新笔记本中的环境变量时遇到问题 我找到了一种方法 但非常棘手 我的项目 env 文件包含 MY VAR HELLO ALICE 包含一个单元格的 t