Cara menyetel variabel env di notebook Jupyter


Jawaban:


115

Untuk menyetel variabel env di notebook jupyter, cukup gunakan %perintah ajaib, baik %envatau %set_env, misalnya, %env MY_VAR=MY_VALUEatau %env MY_VAR MY_VALUE. (Gunakan %envdengan sendirinya untuk mencetak variabel lingkungan saat ini.)

Lihat: http://ipython.readthedocs.io/en/stable/interactive/magics.html


Sudahkah Anda mencoba kutipan? Perhatikan bahwa mengubah os.environ tidak sama - ia hanya dapat mengubah dikt itu (dalam memori, proses python saat ini), dan tidak secara harfiah menyetel OS env var (misalnya untuk perintah! Shell berikutnya).
michael

2
Saya menghapus komentar saya sebelumnya karena tidak cukup akurat - tetapi perhatikan bahwa perintah sihir% env dan% set_env digunakan os.environ[var] = valdi backend: github.com/ipython/ipython/blob/master/IPython/core/magics/…
evan_b

2
@michael Apakah ada cara untuk mempertahankan lingkungan di semua buku catatan? Pengaturan lingkungan dengan cara ini sepertinya hanya mempertahankan lingkungan untuk notebook saat ini.
James Wierzba

31

Anda juga dapat mengatur variabel di kernel.jsonfile 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:

  • Baca dokumentasi di https://jupyter-client.readthedocs.io/en/stable/kernels.html#kernel-specs
  • Jalankan jupyter kernelspec listuntuk melihat daftar dengan kernel yang diinstal dan di mana file disimpan.
  • Salin direktori yang berisi kernel.json (misalnya bernama python2) ke direktori baru (misalnya python2_myENV).
  • Ubah display_namedi kernel.jsonfile baru .
  • Tambahkan envkamus yang mendefinisikan variabel lingkungan.

Kernel json Anda akan terlihat seperti ini (saya tidak mengubah apa pun dari kernel.json yang diinstal kecuali display_namedan env):

{
 "display_name": "Python 2 with environment",
 "language": "python",
 "argv": [
  "/usr/bin/python2",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "env": {"LD_LIBRARY_PATH":""}
}

Gunakan kasus dan keuntungan dari pendekatan ini

  • Dalam kasus penggunaan saya, saya ingin mengatur variabel LD_LIBRARY_PATHyang mempengaruhi bagaimana modul yang dikompilasi (misalnya ditulis dalam C) dimuat. Menyetel variabel ini menggunakan %set_envtidak berhasil.
  • Saya dapat memiliki beberapa kernel python dengan lingkungan yang berbeda.
  • Untuk mengubah lingkungan, saya hanya perlu mengaktifkan / memulai ulang kernel, tetapi saya tidak perlu memulai ulang jupyter instance (berguna, jika saya tidak ingin kehilangan variabel di notebook lain). Lihat -bagaimanapun - https://github.com/jupyter/notebook/issues/2647

Bisakah Anda memberi tahu saya bagaimana cara menambahkan C:\Program Files (x86)\Graphviz2.38\bin\dot.exeke jalur sistem yang ada menggunakan teknik yang Anda sarankan? Apakah akan berhasil jika saya tidak menggunakan akun admin? Saya menggunakan Windows 10.
Khurram Majeed

Persis yang saya butuhkan. Python Homebrew menimpa sys.executablekecuali PYTHONEXECUTABLEdiatur sebelumnya, yang harus Anda atur sebelum python dijalankan.
Stefan Dragnev

Menurut pendapat saya, ini adalah satu - satunya jawaban yang benar, karena hanya menggunakan Jupyter itu sendiri, daripada bergantung pada fungsionalitas yang tersedia di kernel tertentu.
shadowtalker

19

Jika Anda menggunakan Python, Anda dapat menentukan variabel lingkungan Anda dalam sebuah .envfile dan memuatnya dari dalam notebook Jupyter menggunakan python-dotenv .

Instal python-dotenv:

pip install python-dotenv

Muat .envfile di notebook Jupyter:

%load_ext dotenv
%dotenv

17

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


2
Terima kasih Kardaj, mengekspor variabel di ~ / .profile menyelesaikannya, tampaknya itu tidak membaca dari bashrc yang agak aneh.
Ehab AlBadawy

3
jawaban michael dengan %env MY_VAR=MY_VALUEharus menjadi jawaban yang benar untuk pertanyaan ini
Sida Zhou

@SidaZhou kenapa jawaban michael lebih baik?
Dia

2
@SidaZhou bergantung pada kasus penggunaan - jika Anda ingin kredibilitas tersedia di env - dan tidak ingin kredibilitas ada di notebook Anda (misalnya pada kontrol sumber) maka ini tidak ideal.
morganics

4

Jika Anda memerlukan set variabel sebelum Anda memulai notebook, satu-satunya solusi yang berhasil untuk saya adalah env VARIABLE=$VARIABLE jupyter notebookdengan export VARIABLE=valuein .bashrc.

Dalam kasus saya, tensorflow memerlukan variabel yang diekspor agar berhasil mengimpornya di notebook.


2

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"

1

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.


0

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 ,, .envyang 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 .bashrcatau .bash_profileketika 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 .envfile 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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.