Как установить переменную env в ноутбуке Jupyter

У меня проблема с тем, что Jupyter не может видеть переменную env в файле bashrc, есть ли способ загрузить эти переменные в jupyter или добавить к ней переменную custome?

Ответ 1

Чтобы установить переменную env в ноутбуке 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

Вы можете настроить переменные среды в своем коде следующим образом:

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, можно найти более подробную информацию здесь

Ответ 3

Если вы используете Python, вы можете определить переменные окружения в файле .env и загрузить их из записной книжки Jupyter, используя python-dotenv.

Установите python-dotenv:

pip install python-dotenv

Загрузите файл .env в записную книжку Jupyter:

%load_ext dotenv
%dotenv

Ответ 4

Вы также можете установить переменные в вашем файле 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 определяющий переменные среды.

Ваше ядро json может выглядеть следующим образом (я не изменял ничего из установленного kernel.json, кроме display_name и 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 (полезно, если я не хочу терять переменные в другом блокноте). См. -however - https://github.com/jupyter/notebook/issues/2647.

Ответ 5

Если вы используете systemd, я просто обнаружил, что вам, похоже, нужно добавить их в файл systemd. Это на Ubuntu 16. Вставка их в .profile и .bashrc(даже в /etc/profile ) привела к тому, что ENV Vars не были доступны в ноутбуках juypter.

Мне пришлось отредактировать:

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

и введите переменную, которую я хотел прочитать в файле блока, например:

Environment=MYOWN_VAR=theVar

и только после этого я мог прочитать его изнутри ноутбука juypter.

Ответ 6

Если вам нужна переменная, установленная до того, как вы начнете работать с ноутбуком, единственным решением, которое сработало для меня, было env VARIABLE=$VARIABLE jupyter notebook с export VARIABLE=value в .bashrc.

В моем случае для тензорного потока нужна экспортированная переменная для успешного импорта в блокнот.

Ответ 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

Я столкнулся с одной ошибкой: следующие две команды эквивалентны. Обратите внимание, что первый не может использовать кавычки. Несколько нелогично, если %env VAR... в кавычки строку при использовании %env VAR..., кавычки будут включены как часть значения переменной, что, вероятно, не то, что вам нужно.

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

а также

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