簡體   English   中英

如何在 Jupyter notebook 中設置環境變量

[英]How to set env variable in Jupyter notebook

我的問題是 Jupyter 在 bashrc 文件中看不到 env 變量,有沒有辦法在 jupyter 中加載這些變量或向其中添加自定義變量?

要在 jupyter notebook 中設置環境變量,只需使用%魔術命令,即%env%set_env ,例如%env MY_VAR=MY_VALUE%env MY_VAR MY_VALUE (單獨使用%env打印出當前的環境變量。)

請參閱:http://ipython.readthedocs.io/en/stable/interactive/magics.html

您還可以在kernel.json文件中設置變量:

如果每次啟動 jupyter 內核時都需要相同的環境變量,我的解決方案很有用,特別是如果您有多組環境變量用於不同的任務。

要使用環境變量創建新的 ipython 內核,請執行以下操作:

  • 閱讀https://jupyter-client.readthedocs.io/en/stable/kernels.html#kernel-specs上的文檔
  • 運行jupyter kernelspec list以查看包含已安裝內核和文件存儲位置的列表。
  • 將包含 kernel.json 的目錄(例如名為python2 )復制到一個新目錄(例如python2_myENV )。
  • 更改新kernel.json文件中的display_name
  • 添加定義環境變量的env字典。

您的內核 json 可能如下所示(我沒有從已安裝的 kernel.json 中修改任何內容,除了display_nameenv ):

{
 "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

如果您使用的是 Python,則可以在.env文件中定義環境變量,並使用python-dotenv從 Jupyter 筆記本中加載它們。

安裝 python-dotenv:

pip install python-dotenv

在 Jupyter 筆記本中加載.env文件:

%load_ext dotenv
%dotenv

您可以在代碼中設置環境變量,如下所示:

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中,更多信息可以在這里找到

我遇到的一個問題:以下兩個命令是等效的。 注意第一個不能使用引號。 有點違反直覺,在使用%env VAR ...時引用字符串將導致引號被包含在變量值的一部分中,這可能不是您想要的。

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

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

如果您在啟動筆記本之前需要設置變量,那么對我有用的唯一解決方案是env VARIABLE=$VARIABLE jupyter notebook with export VARIABLE=value in .bashrc

在我的情況下,tensorflow 需要導出的變量才能成功地將其導入筆記本。

一個相關的(短期)解決方案是將您的環境變量以可預測的格式存儲在單個文件中,該文件可以在啟動終端和/或讀入筆記本時獲取。 例如,我有一個文件.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文件可以存在於任何地方,並且可以相對於包含筆記本文件的目錄進行引用。 這還有一個優點是不會在代碼中的任何地方顯示變量值。

如果您使用的是 systemd,我剛剛發現您似乎必須將它們添加到 systemd 單元文件中。 這在 Ubuntu 16 上。將它們放入 .profile 和 .bashrc(甚至是 /etc/profile)導致 ENV Vars 在 juypter 筆記本中不可用。

我不得不編輯:

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

並將我想讀取的變量放入單元文件中,例如:

Environment=MYOWN_VAR=theVar

只有這樣我才能從 juypter notebook 中閱讀它。

如果您的 notebook 是由 Jupyter Hub 生成的,您可能需要配置(在jupyterhub_config.py中)允許從 JupyterHub 進程環境轉移到 Notebook 環境的環境變量列表,方法是設置

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

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

另請參閱: Spawner.environment

您可以使用 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 _
網址可以復制粘貼,如果您更改了端口,請驗證端口。

創建一個筆記本並將以下內容粘貼到筆記本中

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM