Jupyter 노트북에서 환경 변수를 설정하는 방법


답변:


115

jupyter 노트북에서 env 변수를 설정하려면 %매직 명령을 사용하십시오. %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을 변경하는 것은 동일하지 않습니다. (메모리, 현재 파이썬 프로세스에서) dict 만 변경할 수 있으며 문자 그대로 OS env var를 설정하지 않습니다 (예 : 후속! shell 명령의 경우).
michael

2
정확하지 않았기 때문에 이전 댓글을 삭제했습니다.하지만 % env 및 % set_env 매직 명령 os.environ[var] = val이 백엔드에서 사용된다는 점에 유의하세요 . github.com/ipython/ipython/blob/master/IPython/core/magics/…
evan_b

2
@michael 모든 노트북에서 환경을 유지하는 방법이 있습니까? 이런 방식으로 환경을 설정하면 현재 노트북의 환경 만 유지되는 것 같습니다.
James Wierzba

30

kernel.json파일 에서 변수를 설정할 수도 있습니다.

내 솔루션은 jupyter 커널을 시작할 때마다 동일한 환경 변수가 필요한 경우, 특히 다른 작업에 대한 여러 환경 변수 집합이있는 경우 유용합니다.

환경 변수를 사용하여 새 ipython 커널을 생성하려면 다음을 수행하십시오.

  • https://jupyter-client.readthedocs.io/en/stable/kernels.html#kernel-specs 에서 설명서를 읽으십시오.
  • jupyter kernelspec list설치된 커널과 파일이 저장된 목록을 보려면 실행 하십시오.
  • kernel.json이 포함 된 디렉토리 (예 : named python2)를 새 디렉토리 (예 :)로 복사합니다 python2_myENV.
  • display_namekernel.json파일 에서 변경 하십시오.
  • env환경 변수를 정의 하는 사전을 추가하십시오 .

커널 json은 다음과 같을 수 있습니다 (및를 제외 display_name하고 설치된 kernel.json에서 아무것도 수정하지 않았습니다 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작동하지 않습니다.
  • 환경이 다른 여러 파이썬 커널을 가질 수 있습니다.
  • 환경을 변경하려면 커널을 전환 / 다시 시작하기 만하면되지만 jupyter 인스턴스를 다시 시작할 필요는 없습니다 (다른 노트북에서 변수를 풀지 않으려는 경우 유용합니다). -그러나-https://github.com/jupyter/notebook/issues/2647 참조

C:\Program Files (x86)\Graphviz2.38\bin\dot.exe제안 된 기술을 사용하여 기존 시스템 경로에 추가하는 방법을 알려주 시겠습니까? 관리자 계정을 사용하지 않아도 작동합니까? Windows 10을 사용하고 있습니다.
Khurram Majeed

정확히 내가 필요한 것. Homebrew의 Python 은 Python이 실행되기 전에 설정해야하는 미리 설정 sys.executable하지 않는 한 덮어 씁니다 PYTHONEXECUTABLE.
스테판 Dragnev

내 생각에 이것은입니다 오히려 특정 커널에서 사용할 수있는 기능에 따라보다 만 Jupyter 자체를 사용하기 때문에, 정답.
shadowtalker

19

Python을 사용하는 경우 .env파일에 환경 변수를 정의 하고 python-dotenv를 사용하여 Jupyter 노트북 내에서로드 할 수 있습니다 .

python-dotenv를 설치합니다.

pip install python-dotenv

.envJupyter 노트북에 파일을 로드합니다 .

%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
~ / .profile의 변수를 내보내는 Kardaj에게 감사드립니다. bashrc에서 읽지 않는 것 같습니다.
Ehab AlBadawy

3
마이클의 대답은 %env MY_VAR=MY_VALUE이 질문에 대한 정확한 답해야한다
SIDA 저우

@SidaZhou 마이클의 대답이 더 나은 이유는 무엇입니까?
Him

2
@SidaZhou는 사용 사례에 따라 달라집니다.-만약 당신이 env에서 creds를 사용하기를 원한다면-당신의 노트북에 creds가있는 것을 원하지 않는다면 (예를 들어, 소스 제어에서) 이것은 이상적이지 않습니다.
morganics 2019

4

당신은 노트북을 시작되기 전에 당신이 변수 설정이 필요하면 나를 위해 일한 유일한 솔루션이었다 env VARIABLE=$VARIABLE jupyter notebookexport 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 단위 파일에 추가해야하는 것 같습니다. 우분투 16에서. .profile 및 .bashrc (/ etc / profile 포함)에 넣으면 juypter 노트북에서 ENV Vars를 사용할 수 없습니다.

나는 편집해야했다 :

/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파일 이 어디에나있을 수 있고 노트북 파일이 포함 된 디렉토리를 기준으로 참조 될 수 있음을 보여주었습니다 . 또한 코드 내의 변수 값을 어디에도 표시하지 않는 장점이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.