如何在 Jupyter 笔记本中设置环境变量

2025-02-28 08:22:00
admin
原创
111
摘要:问题描述:我遇到了 Jupyter 无法在 bashrc 文件中看到环境变量的问题。有没有办法在 jupyter 中加载这些变量或向其中添加自定义变量?解决方案 1:要在 jupyter 笔记本中设置环境变量,只需使用%魔术命令,或%env,%set_env例如%env MY_VAR=MY_VALUE或%en...

问题描述:

我遇到了 Jupyter 无法在 bashrc 文件中看到环境变量的问题。有没有办法在 jupyter 中加载这些变量或向其中添加自定义变量?


解决方案 1:

要在 jupyter 笔记本中设置环境变量,只需使用%魔术命令,或%env%set_env例如%env MY_VAR=MY_VALUE%env MY_VAR MY_VALUE。(%env单独使用可打印出当前环境变量。)

参见:http://ipython.readthedocs.io/en/stable/interactive/magics.html

解决方案 2:

您还可以在文件中设置变量kernel.json

如果每次启动 jupyter 内核时都需要相同的环境变量,我的解决方案很有用,特别是当您为不同的任务有多组环境变量时。

要使用环境变量创建新的 ipython 内核,请执行以下操作:

  • 阅读文档:https://jupyter-client.readthedocs.io/en/stable/kernels.html#kernel-specs

  • 运行jupyter kernelspec list即可查看已安装内核的列表以及文件的存储位置。

  • 将包含 kernel.json 的目录(例如名为python2)复制到新目录(例如python2_myENV)。

  • display_name在新文件中进行更改kernel.json

  • 添加env定义环境变量的字典。

display_name您的内核 json 可能看起来像这样(除了和 之外,我没有修改已安装的 kernel.json 中的任何内容env):

{
 "display_name": "Python 2 with environment",
 "language": "python",
 "argv": [
  "/usr/bin/python2",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "env": {"LD_LIBRARY_PATH":""}
}

此方法的用例和优点

  • 在我的用例中,我想设置一个变量LD_LIBRARY_PATH来影响编译模块(例如用 C 编写的)的加载方式。使用设置此变量%set_env不起作用。

  • 我可以拥有多个具有不同环境的 python 内核。

  • 要更改环境,我只需切换/重新启动内核,但不必重新启动 jupyter 实例(如果我不想丢失另一个笔记本中的变量,这很有用)。但是请参阅 - https://github.com/jupyter/notebook/issues/2647

解决方案 3:

如果您使用的是 Python,则可以在文件中定义环境变量,并使用python-dotenv.env从 Jupyter 笔记本中加载它们。

安装 python-dotenv:

pip install python-dotenv

.env在 Jupyter 笔记本中加载该文件:

%load_ext dotenv
%dotenv

解决方案 4:

您可以在代码中设置环境变量,如下所示:

import sys,os,os.path
sys.path.append(os.path.expanduser('~/code/eol_hsrl_python'))
os.environ['HSRL_INSTRUMENT']='gvhsrl'
os.environ['HSRL_CONFIG']=os.path.expanduser('~/hsrl_config')

这当然是一个临时的解决方案,为了得到永久的解决方案,您可能需要将变量导出到您的,更多信息可以在这里~.profile找到

解决方案 5:

我遇到的一个问题:以下两个命令是等效的。请注意,第一个命令不能使用引号。有点违反直觉的是,在使用时引用字符串%env VAR ...会导致引号被包含在变量的值中,这可能不是您想要的。

%env MYPATH=C:/Folder Name/file.txt

import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"

解决方案 6:

如果您需要在启动笔记本之前设置变量,那么对我而言唯一有效的解决方案就是env VARIABLE=$VARIABLE jupyter notebook使用。export VARIABLE=value`.bashrc`

就我而言,TensorFlow 需要导出的变量才能将其成功导入笔记本。

解决方案 7:

一个相关的(短期)解决方案是将环境变量存储在一个具有可预测格式的文件中,可以在启动终端时获取该文件并/或将其读入笔记本。例如,我有一个文件,,.env其中包含我的环境变量定义,格式为VARIABLE_NAME=VARIABLE_VALUE(没有空行或多余空格)。您可以在开始新的终端会话时在.bashrc.bash_profile文件中获取此文件,然后可以使用类似以下方式将其读入笔记本:

import os
env_vars = !cat ../script/.env
for var in env_vars:
    key, value = var.split('=')
    os.environ[key] = value

我使用了相对路径来表明该.env文件可以位于任何地方,并且可以相对于包含笔记本文件的目录进行引用。这还有一个优点,就是不会在代码中的任何地方显示变量值。

解决方案 8:

如果你的笔记本是由 Jupyter Hub 生成的,你可能需要jupyterhub_config.py通过设置来配置允许从 JupyterHub 进程环境转移到笔记本环境的环境变量列表

c.Spawner.env_keep = [VAR1, VAR2, ...]

https://jupyterhub.readthedocs.io/en/stable/api/spawner.html#jupyterhub.spawner.Spawner.env_keep

参见:Spawner.environment

解决方案 9:

如果您正在使用 systemd,我刚刚发现您似乎必须将它们添加到 systemd 单元文件中。这是在 Ubuntu 16 上。将它们放入 .profile 和 .bashrc(甚至 /etc/profile)会导致 ENV Vars 在 juypter 笔记本中不可用。

我必须编辑:

/lib/systemd/system/jupyer-notebook.service

并将我想要读取的变量放入单元文件中,例如:

Environment=MYOWN_VAR=theVar

只有这样我才能从 juypter 笔记本中读取它。

解决方案 10:

您可以使用 docker 运行 jupyter notebook,而不必管理依赖泄漏。

docker run -p 8888:8888 -v /home/mee/myfolder:/home/jovyan --name notebook1 jupyter/notebook
docker exec -it notebook1 /bin/bash

然后向 jupyter 询问有关打开的笔记本的信息,
jupyter notebook list

http://0.0.0.0 :8888/

?token=012456788997977a6eb11e45fffff 可以复制粘贴 URL,如果更改了端口,请验证端口。

创建一个笔记本并将以下内容粘贴到笔记本中

!pip install python-dotenv
import dotenv
%load_ext dotenv
%dotenv

解决方案 11:

结论

在 Linux 上的 Jupyter Notebook 中,加载 PyTorch 模型时,我必须运行!export CUDA_VISIBLE_DEVICES=0,1以将张量分散到两个 GPU 上。这是让 ParallelData 代码工作的唯一方法。os.environ[]或者%set_env不工作。

这个答案几乎和这里另一个答案重复了

如果你使用 Keras 的话,这似乎是一样的,请参见上面的这个答案,这个答案占用了它,但是这个答案更进一步:

  • 它将向您展示更多运行代码的方法,而无需更改 .bashrc 或 Jupyter Notebook 服务设置。

  • 并且它强调,大多数其他答案可能完全是错误的,至少如果你必须在 GPU 之间分割张量,并且可能存在其他设置,其中 Python 代码无法很好地控制环境变量。

Shell 命令:export/MY_ENV_VAR=0,1 python some_cuda_executable.py

对于CUDA_VISIBLE_DEVICES和可能其他变量,%set_env或者os.environ[]不起作用,这个 Stack Overflow如何让 Jupyter Notebook 在多个 gpu 中的一个指定 gpu 上运行?遇到了同样的事情。因此,在某些设置中,您只需要在 CLI 中运行命令,而不是在 Python 中,然后,无法在纯 Python 代码中执行此操作。

反而:

  • !export ...(在 Jupyter Notebook 单元中与需要这些环境变量的代码一起;它必须是同一个单元,并且必须在它的开头运行)。

  • 您也可以像使用一样在 CLI 执行中运行它CUDA_VISIBLE_DEVICES=4,5,6,7 python forward_test_ins.py

最重要的是,除非你调整了 .bashrc(未经测试),否则你不应该在代码中写入os.environ[]或,请参阅上面的答案,或者 Jupyter Notebook 服务设置(未经测试),请参阅上面的答案
。但请注意:如果你运行 python 文件,错误也会在 Jupyter Notebook 之外抛出。还请查看上面的kernel.json 文件的答案(未经测试)。%set_env

更多链接

更多信息请参见:

  • 如何解决使用 DataParallel 训练的模型上 PyTorch 单 GPU 推理中的“CUDA:无效设备序号”错误?os.environ[]这证明它对和%set_env代码都不起作用,

  • 这是 Transformers Trainer 中用于使用多 GPU 进行并行计算的 CUDA_VISIBLE_DEVICES 示例:“RuntimeError:模块必须在设备 cuda:6(device_ids[0])上具有其参数...但在设备 cuda:0 上找到了其中一个”,

  • 设置 CUDA_VISIBLE_DEVICES 的条目没有效果 #9158。

解决方案 12:

jupyter 对 中定义的内容很敏感.profile。您可以在那里定义您的环境变量(只需确保您注销/重新登录以便读取 .profile)

解决方案 13:

如果您有 vsCode,只需像往常一样在终端中创建环境,然后转到 jupyter 文件,然后单击右上角的选择内核,然后命令面板将打开环境路径,只需单击它就会获取环境。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2941  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1803  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色。然而,在实际运行中,资源冲突是经常会遇到的难题。资源冲突可能导致项目进度延迟、成本增加以及产品质量下降等一系列问题,严重影响企业的效益与竞争力。因此,如何有效应对PLM系统中的资源冲突,成为众多企业关注的焦点。接下来,我们将详细探讨5...
plm项目管理系统   31  
  敏捷项目管理与产品生命周期管理(PLM)的融合,正成为企业在复杂多变的市场环境中提升研发效率、增强竞争力的关键举措。随着技术的飞速发展和市场需求的快速更迭,传统的研发流程面临着诸多挑战,而将敏捷项目管理理念融入PLM,有望在2025年实现研发流程的深度优化,为企业创造更大的价值。理解敏捷项目管理与PLM的核心概念敏捷项...
plm项目   31  
  模块化设计在现代产品开发中扮演着至关重要的角色,它能够提升产品开发效率、降低成本、增强产品的可维护性与可扩展性。而产品生命周期管理(PLM)系统作为整合产品全生命周期信息的关键平台,对模块化设计有着强大的支持能力。随着技术的不断发展,到 2025 年,PLM 系统在支持模块化设计方面将有一系列令人瞩目的技术实践。数字化...
plm软件   28  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用