У меня проблема с тем, что Jupyter не может видеть переменную env в файле bashrc, есть ли способ загрузить эти переменные в jupyter или добавить к ней переменную custome?
Как установить переменную env в ноутбуке Jupyter
Ответ 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"