Mam problem z tym, że Jupyter nie widzi zmiennej env w pliku bashrc, czy istnieje sposób, aby załadować te zmienne w jupyter lub dodać do niego zmienną custome?
Mam problem z tym, że Jupyter nie widzi zmiennej env w pliku bashrc, czy istnieje sposób, aby załadować te zmienne w jupyter lub dodać do niego zmienną custome?
Odpowiedzi:
Aby ustawić zmienną env w notatniku jupyter, po prostu użyj %
magicznych poleceń, albo %env
lub %set_env
, na przykład, %env MY_VAR=MY_VALUE
albo %env MY_VAR MY_VALUE
. (Użyj %env
samodzielnie, aby wydrukować aktualne zmienne środowiskowe.)
Zobacz: http://ipython.readthedocs.io/en/stable/interactive/magics.html
os.environ[var] = val
na zapleczu: github.com/ipython/ipython/blob/master/IPython/core/magics/ ...
kernel.json
pliku:Moje rozwiązanie jest przydatne, jeśli potrzebujesz tych samych zmiennych środowiskowych za każdym razem, gdy uruchamiasz jądro jupyter, zwłaszcza jeśli masz wiele zestawów zmiennych środowiskowych do różnych zadań.
Aby utworzyć nowe jądro ipython ze zmiennymi środowiskowymi, wykonaj następujące czynności:
jupyter kernelspec list
aby zobaczyć listę z zainstalowanymi jądrami i miejscem przechowywania plików.python2
) do nowego katalogu (np python2_myENV
.).display_name
w nowym kernel.json
pliku.env
słownik definiujący zmienne środowiskowe.Twój json jądra mógłby wyglądać tak (nie modyfikowałem niczego z zainstalowanego kernel.json z wyjątkiem display_name
i 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
która wpływa na sposób ładowania skompilowanych modułów (np. Napisanych w C). Ustawienie tej zmiennej za pomocą %set_env
nie działa.C:\Program Files (x86)\Graphviz2.38\bin\dot.exe
do istniejącej ścieżki systemowej za pomocą sugerowanej techniki? Czy to zadziała, jeśli nie używam konta administratora? Używam systemu Windows 10.
sys.executable
chyba że PYTHONEXECUTABLE
jest ustawiony wcześniej, co musisz ustawić przed uruchomieniem Pythona.
Jeśli używasz Pythona, możesz zdefiniować zmienne środowiskowe w .env
pliku i załadować je z notatnika Jupyter za pomocą python-dotenv .
Zainstaluj python-dotenv:
pip install python-dotenv
Załaduj .env
plik do notatnika Jupyter:
%load_ext dotenv
%dotenv
Możesz ustawić zmienne środowiskowe w swoim kodzie w następujący sposób:
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')
Jeśli oczywiście jest to tymczasowa poprawka, aby uzyskać stałą, prawdopodobnie będziesz musiał wyeksportować zmienne do swojego ~.profile
, więcej informacji można znaleźć tutaj
%env MY_VAR=MY_VALUE
powinna być poprawną odpowiedzią na to pytanie
Jeśli potrzebujesz zmiennej zestaw zanim zaczynasz notebooka, jedynym rozwiązaniem, które pracował dla mnie było env VARIABLE=$VARIABLE jupyter notebook
z export VARIABLE=value
w .bashrc
.
W moim przypadku tensorflow potrzebuje wyeksportowanej zmiennej do pomyślnego zaimportowania jej do notatnika.
Problem, na który natknąłem się: Poniższe dwa polecenia są równoważne. Zauważ, że pierwszy nie może używać cudzysłowów. Nieco sprzecznie z intuicją, cytowanie łańcucha podczas używania %env VAR ...
spowoduje, że cudzysłowy zostaną uwzględnione jako część wartości zmiennej, co prawdopodobnie nie jest tym, czego chcesz.
%env MYPATH=C:/Folder Name/file.txt
i
import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"
Jeśli używasz systemd właśnie dowiedziałem się, że musisz dodać je do pliku jednostki systemd. To na Ubuntu 16. Umieszczenie ich w plikach .profile i .bashrc (nawet w / etc / profile) spowodowało, że zmienne ENV nie były dostępne w notebookach juypter.
Musiałem edytować:
/lib/systemd/system/jupyer-notebook.service
i wstawiłem zmienną, którą chciałem przeczytać w pliku jednostkowym, na przykład:
Environment=MYOWN_VAR=theVar
i dopiero wtedy mogłem go przeczytać z zeszytu Juypter.
Powiązane (krótkoterminowe) rozwiązanie polega na przechowywaniu zmiennych środowiskowych w jednym pliku w przewidywalnym formacie, który można pobrać podczas uruchamiania terminala i / lub wczytywania do notatnika. Na przykład mam plik, .env
który ma moje definicje zmiennych środowiskowych w formacie VARIABLE_NAME=VARIABLE_VALUE
(bez pustych wierszy lub dodatkowych spacji). Możesz pobrać ten plik w plikach .bashrc
lub .bash_profile
podczas rozpoczynania nowej sesji terminala i możesz wczytać go do notatnika za pomocą czegoś takiego jak:
import os
env_vars = !cat ../script/.env
for var in env_vars:
key, value = var.split('=')
os.environ[key] = value
Użyłem ścieżki względnej, aby pokazać, że ten .env
plik może znajdować się w dowolnym miejscu i być powiązany z katalogiem zawierającym plik notatnika. Ma to również tę zaletę, że nigdzie nie wyświetla wartości zmiennych w kodzie.