Jupyter not defterinde env değişkeni nasıl ayarlanır


Yanıtlar:


115

Bir jupyter defterine bir env değişkeni ayarlamak sadece kullanmak için %sihirli komutları ya %envya %set_env, mesela, %env MY_VAR=MY_VALUEya da %env MY_VAR MY_VALUE. ( %envMevcut çevresel değişkenleri yazdırmak için tek başına kullanın .)

Bakınız: http://ipython.readthedocs.io/en/stable/interactive/magics.html


Sadece alıntıları denediniz mi? Os.environ'ı değiştirmenin aynı şey olmadığını unutmayın - yalnızca bunu (bellekte, mevcut python işlemi) değiştirebilir ve kelimenin tam anlamıyla bir OS env değişkeni (örneğin sonraki! Shell komutları için) ayarlamaz.
michael

2
Daha önceki yorumlarımı pek doğru olmadıkları için sildim - ancak% env ve% set_env sihirli komutlarının os.environ[var] = valarka uçta kullandığını unutmayın : github.com/ipython/ipython/blob/master/IPython/core/magics/…
evan_b

2
@michael Tüm dizüstü bilgisayarlarda çevreyi sürdürmenin bir yolu var mı? Ortamın bu şekilde ayarlanması, yalnızca mevcut dizüstü bilgisayar için ortamı sürdürüyor gibi görünüyor.
James Wierzba

31

kernel.jsonDosyanızdaki değişkenleri de ayarlayabilirsiniz :

Bir jupyter çekirdeğini her başlattığınızda aynı ortam değişkenlerine ihtiyacınız varsa, özellikle de farklı görevler için birden fazla ortam değişkenine sahipseniz benim çözümüm kullanışlıdır.

Ortam değişkenlerinizle yeni bir ipython çekirdeği oluşturmak için aşağıdakileri yapın:

  • Https://jupyter-client.readthedocs.io/en/stable/kernels.html#kernel-specs adresindeki belgeleri okuyun
  • jupyter kernelspec listYüklü çekirdekler ve dosyaların depolandığı bir listeyi görmek için çalıştırın .
  • Kernel.json dosyasını içeren dizini (örneğin adlandırılmış python2) yeni bir dizine (ör python2_myENV. ) Kopyalayın .
  • Değişim display_nameyeni de kernel.jsondosyaya.
  • envOrtam değişkenlerini tanımlayan bir sözlük ekleyin .

Çekirdek json'unuz şöyle görünebilir ( display_nameve dışında kurulu kernel.json'dan hiçbir şey değiştirmedim env):

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

Bu yaklaşımın kullanım durumları ve avantajları

  • Benim kullanım durumumda, LD_LIBRARY_PATHderlenmiş modüllerin (örneğin C ile yazılmış) nasıl yükleneceğini etkileyen değişkeni ayarlamak istedim . Bu değişkeni kullanarak ayarlamak %set_envişe yaramadı.
  • Farklı ortamlarda birden fazla python çekirdeğine sahip olabilirim.
  • Ortamı değiştirmek için, yalnızca çekirdeği değiştirmem / yeniden başlatmam gerekiyor, ancak jupyter örneğini yeniden başlatmam gerekmiyor (başka bir dizüstü bilgisayardaki değişkenleri kaybetmek istemiyorsam kullanışlıdır). Bakın -however - https://github.com/jupyter/notebook/issues/2647

C:\Program Files (x86)\Graphviz2.38\bin\dot.exeÖnerilen tekniğinizi kullanarak mevcut sistem yoluna nasıl ekleyebileceğimi bana söyleyebilir misiniz ? Yönetici hesabı kullanmıyorsam çalışacak mı? Windows 10 kullanıyorum
Khurram Majeed

Tam olarak ihtiyacım olan şey. Homebrew Python üzerine yazar sys.executablesürece PYTHONEXECUTABLEsen piton çalışmadan önce setine sahip olan önceden ayarlanır.
Stefan Dragnev

Bence bu tek doğru cevap, çünkü herhangi bir belirli çekirdekte bulunan işlevselliğe bağlı olmak yerine sadece Jupyter'in kendisini kullanıyor.
shadowtalker

19

Python kullanıyorsanız, ortam değişkenlerinizi bir .envdosyada tanımlayabilir ve python-dotenv kullanarak bir Jupyter not defterinden yükleyebilirsiniz .

Python-dotenv'yi yükleyin:

pip install python-dotenv

.envDosyayı bir Jupyter not defterine yükleyin :

%load_ext dotenv
%dotenv

17

Kodunuzda ortam değişkenlerini aşağıdaki şekilde ayarlayabilirsiniz:

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')

Bu, tabii ki geçici bir düzeltme ise, kalıcı bir düzeltme elde etmek için, muhtemelen değişkenleri içeri aktarmanız gerekir ~.profile, daha fazla bilgiyi burada bulabilirsiniz.


2
Teşekkürler Kardaj, ~ / .profile içindeki değişkeni dışa aktarmak sorunu çözdü, bu biraz tuhaf olan bashrc'den okumuyor gibi görünüyor.
Ehab AlBadawy

3
michael'ın %env MY_VAR=MY_VALUEcevabı, bu sorunun doğru cevabı olmalı
Sida Zhou

@SidaZhou neden michael'ın cevabı daha iyi?
Him

2
@SidaZhou kullanım durumuna bağlıdır - kredilerin env içinde bulunmasını istiyorsanız - ve not defterinizde kredinin olmasını istemiyorsanız (örneğin kaynak kontrolünde) bu ideal değildir.
morganics

4

Dizüstü bilgisayarı başlatmadan önce değişken setine ihtiyacınız varsa, benim için çalışan tek çözüm in env VARIABLE=$VARIABLE jupyter notebookile export VARIABLE=valueoldu .bashrc.

Benim durumumda tensorflow, bir deftere başarılı bir şekilde içe aktarmak için dışa aktarılan değişkene ihtiyaç duyar.


2

Karşılaştığım bir sorun: Aşağıdaki iki komut eşdeğerdir. İlk Not değil kutu tırnak kullanabilirsiniz. Sezgiye tam tersi bir şekilde, kullanırken dizeyi %env VAR ...tırnak içine almak, değişken değerinin bir parçası olarak tırnak işaretlerinin eklenmesiyle sonuçlanacaktır, ki bu muhtemelen istediğiniz şey değildir.

%env MYPATH=C:/Folder Name/file.txt

ve

import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"

1

Systemd kullanıyorsanız, onları systemd birim dosyasına eklemeniz gerektiğini anladım. Bu Ubuntu 16'da. Bunları .profile ve .bashrc'ye (hatta / etc / profile) koymak, ENV Vars'ın juypter not defterlerinde bulunmamasına neden oldu.

Düzenlemem gerekiyordu:

/lib/systemd/system/jupyer-notebook.service

ve okumak istediğim değişkeni birim dosyaya şöyle koyun:

Environment=MYOWN_VAR=theVar

ve ancak o zaman onu juypter defterinden okuyabildim.


0

İlgili (kısa vadeli) bir çözüm, ortam değişkenlerinizi, bir terminal başlatılırken ve / veya not defterine okurken kaynaklanabilen tahmin edilebilir bir formatta tek bir dosyada depolamaktır. Örneğin .env, formatta ortam değişkeni tanımlarına sahip bir dosyam var VARIABLE_NAME=VARIABLE_VALUE(boş satırlar veya fazladan boşluklar yok). Yeni bir terminal oturumuna başlarken bu dosyayı .bashrcveya .bash_profiledosyalarından kaynaklayabilirsiniz ve bunu aşağıdaki gibi bir not defterine okuyabilirsiniz:

import os
env_vars = !cat ../script/.env
for var in env_vars:
    key, value = var.split('=')
    os.environ[key] = value

Bu .envdosyanın herhangi bir yerde yaşayabileceğini ve not defteri dosyasını içeren dizine göre başvurulabileceğini göstermek için göreli bir yol kullandım . Bu aynı zamanda, kodunuzdaki değişken değerleri hiçbir yerde göstermeme avantajına da sahiptir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.