Saya punya masalah bahwa Jupyter tidak dapat melihat variabel env di file bashrc, apakah ada cara untuk memuat variabel ini di jupyter atau menambahkan variabel custome ke dalamnya?
Saya punya masalah bahwa Jupyter tidak dapat melihat variabel env di file bashrc, apakah ada cara untuk memuat variabel ini di jupyter atau menambahkan variabel custome ke dalamnya?
Jawaban:
Untuk menyetel variabel env di notebook jupyter, cukup gunakan %
perintah ajaib, baik %env
atau %set_env
, misalnya, %env MY_VAR=MY_VALUE
atau %env MY_VAR MY_VALUE
. (Gunakan %env
dengan sendirinya untuk mencetak variabel lingkungan saat ini.)
Lihat: http://ipython.readthedocs.io/en/stable/interactive/magics.html
os.environ[var] = val
di backend: github.com/ipython/ipython/blob/master/IPython/core/magics/…
kernel.json
file Anda :Solusi saya berguna jika Anda memerlukan variabel lingkungan yang sama setiap kali Anda memulai kernel jupyter, terutama jika Anda memiliki beberapa set variabel lingkungan untuk tugas yang berbeda.
Untuk membuat kernel ipython baru dengan variabel lingkungan Anda, lakukan hal berikut:
jupyter kernelspec list
untuk melihat daftar dengan kernel yang diinstal dan di mana file disimpan.python2
) ke direktori baru (misalnya python2_myENV
).display_name
di kernel.json
file baru .env
kamus yang mendefinisikan variabel lingkungan.Kernel json Anda akan terlihat seperti ini (saya tidak mengubah apa pun dari kernel.json yang diinstal kecuali display_name
dan 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
yang mempengaruhi bagaimana modul yang dikompilasi (misalnya ditulis dalam C) dimuat. Menyetel variabel ini menggunakan %set_env
tidak berhasil.C:\Program Files (x86)\Graphviz2.38\bin\dot.exe
ke jalur sistem yang ada menggunakan teknik yang Anda sarankan? Apakah akan berhasil jika saya tidak menggunakan akun admin? Saya menggunakan Windows 10.
sys.executable
kecuali PYTHONEXECUTABLE
diatur sebelumnya, yang harus Anda atur sebelum python dijalankan.
Jika Anda menggunakan Python, Anda dapat menentukan variabel lingkungan Anda dalam sebuah .env
file dan memuatnya dari dalam notebook Jupyter menggunakan python-dotenv .
Instal python-dotenv:
pip install python-dotenv
Muat .env
file di notebook Jupyter:
%load_ext dotenv
%dotenv
Anda dapat menyiapkan variabel lingkungan dalam kode Anda sebagai berikut:
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')
Ini tentu saja merupakan perbaikan sementara, untuk mendapatkan yang permanen, Anda mungkin perlu mengekspor variabel ke Anda ~.profile
, informasi lebih lanjut dapat ditemukan di sini
%env MY_VAR=MY_VALUE
harus menjadi jawaban yang benar untuk pertanyaan ini
Jika Anda memerlukan set variabel sebelum Anda memulai notebook, satu-satunya solusi yang berhasil untuk saya adalah env VARIABLE=$VARIABLE jupyter notebook
dengan export VARIABLE=value
in .bashrc
.
Dalam kasus saya, tensorflow memerlukan variabel yang diekspor agar berhasil mengimpornya di notebook.
Gotcha yang saya temui: Dua perintah berikut ini setara. Perhatikan bahwa yang pertama tidak dapat menggunakan tanda kutip. Agak berlawanan dengan intuisi, mengutip string saat menggunakan %env VAR ...
akan menghasilkan tanda kutip yang disertakan sebagai bagian dari nilai variabel, yang mungkin bukan yang Anda inginkan.
%env MYPATH=C:/Folder Name/file.txt
dan
import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"
Jika Anda menggunakan systemd, saya baru tahu bahwa Anda tampaknya harus menambahkannya ke file unit systemd. Ini di Ubuntu 16. Menempatkannya ke .profile dan .bashrc (bahkan / etc / profile) mengakibatkan ENV Vars tidak tersedia di notebook juypter.
Saya harus mengedit:
/lib/systemd/system/jupyer-notebook.service
dan masukkan variabel yang ingin saya baca di file unit seperti:
Environment=MYOWN_VAR=theVar
dan baru setelah itu saya dapat membacanya dari dalam notebook juypter.
Solusi terkait (jangka pendek) adalah menyimpan variabel lingkungan Anda dalam satu file, dengan format yang dapat diprediksi, yang dapat bersumber saat memulai terminal dan / atau membaca ke dalam notebook. Misalnya, saya memiliki file ,, .env
yang memiliki definisi variabel lingkungan saya dalam format VARIABLE_NAME=VARIABLE_VALUE
(tidak ada baris kosong atau spasi ekstra). Anda dapat mengambil file ini di file .bashrc
atau .bash_profile
ketika memulai sesi terminal baru dan Anda dapat membacanya menjadi buku catatan dengan sesuatu seperti,
import os
env_vars = !cat ../script/.env
for var in env_vars:
key, value = var.split('=')
os.environ[key] = value
Saya menggunakan jalur relatif untuk menunjukkan bahwa .env
file ini dapat hidup di mana saja dan direferensikan secara relatif ke direktori yang berisi file notebook. Ini juga memiliki keuntungan karena tidak menampilkan nilai variabel dalam kode Anda di mana pun.