У меня проблема с тем, что 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"