Як встановити змінну env у блокноті Jupyter


Відповіді:


115

Щоб встановити змінну 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


Ви просто пробували цитати? Зверніть увагу, що зміна os.environ - це не те саме - воно може змінити лише той (у пам’яті, поточний процес python) дикт і буквально не встановлює змінну env OS ОС (наприклад, для наступних! Команд оболонки).
Майкл

2
Я видалив свої попередні коментарі, оскільки вони були не зовсім точними, але зауважте, що магічні команди% env та% set_env використовують os.environ[var] = valна сервері: github.com/ipython/ipython/blob/master/IPython/core/magics/…
evan_b

2
@michael Чи є спосіб зберегти навколишнє середовище у всіх ноутбуках? Встановлення середовища таким чином, здається, зберігає лише середовище для поточного блокнота.
James Wierzba

32

Ви також можете встановити змінні у своєму 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

Чи можете ви, будь ласка, порадити мені, як я можу додати C:\Program Files (x86)\Graphviz2.38\bin\dot.exeдо існуючого системного шляху за допомогою запропонованої вами техніки? Чи буде це працювати, якщо я не використовую обліковий запис адміністратора? Я використовую Windows 10.
Khurram Majeed,

Саме те, що мені було потрібно. Python Homebrew перезаписує, sys.executableякщо PYTHONEXECUTABLEне встановлено заздалегідь, що потрібно встановити перед запуском python.
Стефан Драгнєв

На мою думку, це єдина правильна відповідь, оскільки вона використовує лише сам Юпітер, а не залежно від функціональності, доступної в будь-якому конкретному ядрі.
shadowtalker

19

Якщо ви використовуєте Python, ви можете визначити змінні середовища у .envфайлі та завантажити їх із блокнота Jupyter за допомогою python-dotenv .

Встановіть python-dotenv:

pip install python-dotenv

Завантажте .envфайл у блокнот Jupyter:

%load_ext dotenv
%dotenv

17

Ви можете налаштувати змінні середовища у своєму коді наступним чином:

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


2
Завдяки Kardaj, експорт змінної у ~ / .profile вирішив, здається, це не читання з bashrc, що є якось дивним.
Ehab AlBadawy,

3
відповідь Майкла з %env MY_VAR=MY_VALUEповинна бути правильною відповіддю на це запитання
Sida Zhou

@SidaZhou, чому відповідь Майкла краща?
Йому

2
@SidaZhou залежить від випадку використання - якщо ви хочете, щоб кредити були доступні в env - і не хочете, щоб кредити були у вашому блокноті (наприклад, на контролі джерела), це не ідеально.
Морганікс

4

Якщо вам потрібен набір змінних перед тим, як запускати ноутбук, єдиним рішенням, яке мені вдалося, було env VARIABLE=$VARIABLE jupyter notebookвикористання export VARIABLE=valueв .bashrc.

У моєму випадку tensorflow потребує експортованої змінної для успішного імпорту її в блокнот.


2

Помилка, з якою я зіткнувся: Наступні дві команди еквівалентні. Зверніть увагу, що перший не може використовувати лапки. Дещо протилежне інтуїтивному наведенню рядка під час використання %env VAR ...призведе до того, що лапки будуть включені як частина значення змінної, що, мабуть, не те, що ви хочете.

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

і

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

1

Якщо ви використовуєте systemd, я щойно дізнався, що вам, здається, потрібно додати їх до файлу одиниці systemd. Це стосується Ubuntu 16. Введення їх у .profile та .bashrc (навіть у / etc / profile) призвело до того, що VAR-адреси ENV будуть недоступні в блокнотах juypter.

Мені довелося відредагувати:

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

і помістіть змінну, яку я хотів прочитати у файлі одиниці, наприклад:

Environment=MYOWN_VAR=theVar

і лише тоді я міг прочитати його із зошита juypter.


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.