Як встановити змінну 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.