Jupyter नोटबुक में env वैरिएबल कैसे सेट करें


98

मुझे एक समस्या है कि जुपिटर bashrc फ़ाइल में env वैरिएबल नहीं देख सकता है, क्या इन वेरिएबल्स को ज्यूपिटर में लोड करने या इसमें कस्टोम वैरिएबल जोड़ने का कोई तरीका है?

जवाबों:


122

एक जूपिटर नोटबुक में एक एनवी चर सेट करने के लिए, बस एक %जादू कमांड का उपयोग करें , %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 को बदलना समान नहीं है - यह केवल (स्मृति में, वर्तमान अजगर प्रक्रिया) को बदल सकता है, और शाब्दिक रूप से OS env var (जैसे बाद के शेल कमांड के लिए) सेट नहीं करता है।
माइकल

2
मैंने अपनी पिछली टिप्पणियों को हटा दिया क्योंकि वे काफी सटीक नहीं थीं - लेकिन ध्यान दें कि% env और% set_env मैजिक कमांड्स os.environ[var] = valबैकएंड पर उपयोग करते हैं: github.com/ipython/ipython/blob/master/IPython-core/magics/…
evan_b

2
@michael सभी नोटबुक्स में पर्यावरण को बनाए रखने का कोई तरीका है? पर्यावरण की स्थापना इस तरह से केवल वर्तमान नोटबुक के लिए पर्यावरण को बनाए रखने के लिए प्रतीत होती है।
जेम्स विएर्ज़ा

34

आप अपनी kernel.jsonफ़ाइल में चर भी सेट कर सकते हैं :

मेरा समाधान उपयोगी है यदि आपको एक ही पर्यावरण चर की आवश्यकता होती है, तो हर बार जब आप एक ज्यूपिटर कर्नेल शुरू करते हैं, खासकर यदि आपके पास विभिन्न कार्यों के लिए पर्यावरण चर के कई सेट हैं।

अपने पर्यावरण चर के साथ एक नया ipython कर्नेल बनाने के लिए, निम्नलिखित कार्य करें:

  • प्रलेखन को https://jupyter-client.readthedocs.io/en/stable/kernels.html#kernel-specs पर पढ़ें
  • jupyter kernelspec listस्थापित गुठली के साथ एक सूची देखने के लिए चलाएँ और जहाँ फ़ाइलों को संग्रहीत किया जाता है।
  • उस निर्देशिका को कॉपी करें जिसमें कर्नेल। Json (जैसे नाम python2) एक नई निर्देशिका (जैसे python2_myENV) के लिए है।
  • display_nameनई kernel.jsonफ़ाइल में बदलें ।
  • envपर्यावरण चर को परिभाषित करने वाला शब्दकोश जोड़ें ।

आपका कर्नेल जसन इस तरह दिख सकता है (मैंने स्थापित कर्नेल से कुछ भी संशोधित नहीं किया है। सिवाय इसके display_nameऔर 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जो प्रभावित करता है कि कैसे संकलित मॉड्यूल (जैसे सी में लिखे गए) लोड किए जाते हैं। इस चर का उपयोग करके सेट करने से %set_envकाम नहीं हुआ।
  • मेरे पास विभिन्न वातावरणों के साथ कई अजगर गुठली हो सकते हैं।
  • पर्यावरण को बदलने के लिए, मुझे केवल कर्नेल को स्विच / पुनरारंभ करना होगा, लेकिन मुझे ज्यूपिटर उदाहरण (उपयोगी नहीं है, अगर मुझे किसी अन्य नोटबुक में चर को ढीला नहीं करना है)। देखें-कैसे भी - https://github.com/jupyter/notebook/issues/2647

क्या आप मुझे सलाह दे सकते हैं कि मैं C:\Program Files (x86)\Graphviz2.38\bin\dot.exeआपकी सुझाई गई तकनीक का उपयोग करके मौजूदा सिस्टम पथ में कैसे जोड़ूँ ? यदि मैं व्यवस्थापक खाते का उपयोग नहीं कर रहा हूं तो क्या यह काम करेगा? मैं विंडोज 10 का उपयोग कर रहा हूं
खुर्रम मजीद

वास्तव में मुझे जो चाहिए था। होमब्रेव का पायथन ओवरराइट करता है sys.executableजब तक कि PYTHONEXECUTABLEवह पहले से सेट न हो , जिसे आपको अजगर के चलने से पहले सेट करना होगा।
स्टीफन ड्रैगनेव

मेरी राय में यह एकमात्र सही उत्तर है, क्योंकि यह किसी भी विशिष्ट कर्नेल में उपलब्ध कार्यक्षमता के आधार पर केवल जुपिटर का उपयोग करता है।
छायाकार

22

यदि आप पायथन का उपयोग कर रहे हैं, तो आप अपने पर्यावरण चर को एक .envफ़ाइल में परिभाषित कर सकते हैं और उन्हें अजगर-डॉटेनव का उपयोग करके ज्यूपिटर नोटबुक के भीतर से लोड कर सकते हैं ।

अजगर स्थापित करें:

pip install python-dotenv

लोड करें .envफ़ाइल को ज्यूपिटर नोटबुक में :

%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
धन्यवाद Kardaj, ~ / .profile में चर का निर्यात करते हुए, ऐसा लगता है कि यह bashrc जो थोड़े अजीब है से नहीं पढ़ रहा है।
एहब अलबादवी

3
साथ माइकल के जवाब %env MY_VAR=MY_VALUEइस सवाल का सही जवाब होना चाहिए
सीडा झोउ

@ सिडाझू क्यों है माइकल का जवाब बेहतर?
उसे

2
@ सिडाझोउ उपयोग के मामले पर निर्भर करता है - यदि आप चाहते हैं कि क्रेडिट एनवी में उपलब्ध हो - और यह नहीं चाहते कि क्रेडिट आपके नोटबुक में हो (जैसे स्रोत नियंत्रण पर) तो यह आदर्श नहीं है।
मॉर्गनिक्स

4

यदि आपको नोटबुक शुरू करने से पहले चर सेट की आवश्यकता है, तो एकमात्र समाधान जो मेरे लिए काम करता था, उसके env VARIABLE=$VARIABLE jupyter notebookसाथ export VARIABLE=valueथा .bashrc

मेरे मामले में टेंसरफ़्लो को एक नोटबुक में सफल आयात करने के लिए निर्यातित चर की आवश्यकता है।


3

एक गोच मैं भाग गया: निम्नलिखित दो आज्ञाएँ बराबर हैं। ध्यान दें पहले उद्धरणों का उपयोग नहीं कर सकते । कुछ हद तक जवाबी तौर पर, स्ट्रिंग का उपयोग करते समय कोटेशन का %env VAR ...परिणाम चर के मूल्य के हिस्से के रूप में शामिल किया जाएगा, जो कि शायद आप नहीं चाहते हैं।

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

तथा

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

1

यदि आप systemd का उपयोग कर रहे हैं तो मुझे अभी पता चला है कि आप उन्हें systemd यूनिट फ़ाइल में जोड़ना चाहते हैं। यह 16 Ubuntu पर। उन्हें .profile और .bashrc (यहां तक ​​कि / etc / प्रोफाइल) में डालने से ENV Vars को जिप्टर नोटबुक में उपलब्ध नहीं किया गया।

मुझे संपादित करना था:

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

और वैरिएबल में डाल दिया, जिसे मैं यूनिट फ़ाइल में पढ़ना चाहता था जैसे:

Environment=MYOWN_VAR=theVar

और उसके बाद ही मैं इसे जूसर नोटबुक से पढ़ सकता था।


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फ़ाइल कहीं भी रह सकती है और नोटबुक फ़ाइल वाली निर्देशिका के सापेक्ष संदर्भित की जा सकती है। यह आपके कोड के भीतर चर मानों को कहीं भी प्रदर्शित नहीं करने का भी लाभ है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.