it-roy-ru.com

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

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

26
Ehab AlBadawy

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

33
michael

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

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

13
kardaj

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

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

pip install python-dotenv

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

%load_ext dotenv
%dotenv
2
aparkerlue

Вы также можете установить переменные в своем файле 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 (полезно, если я не хочу терять переменные в другом блокноте). См. Однако - https://github.com/jupyter/notebook/issues/2647
1
TheEspinosa

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

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

1
Baschdl

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

Я должен был отредактировать:

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

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

Environment=MYOWN_VAR=theVar

и только тогда я смог прочитать его из записной книжки.

1
Andy D

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

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

а также

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

Связанное (краткосрочное) решение заключается в хранении переменных среды в одном файле с предсказуемым форматом, который можно получить при запуске терминала и/или прочитать в записной книжке. Например, у меня есть файл .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 может находиться где угодно и на который можно ссылаться относительно каталога, содержащего файл ноутбука. Это также имеет то преимущество, что нигде не отображает значения переменных в вашем коде.

0
wingr