ฉันมีปัญหาที่ Jupyter มองไม่เห็นตัวแปร env ในไฟล์ bashrc มีวิธีโหลดตัวแปรเหล่านี้ใน jupyter หรือเพิ่มตัวแปร custome เข้าไปได้หรือไม่
ฉันมีปัญหาที่ Jupyter มองไม่เห็นตัวแปร env ในไฟล์ bashrc มีวิธีโหลดตัวแปรเหล่านี้ใน jupyter หรือเพิ่มตัวแปร custome เข้าไปได้หรือไม่
คำตอบ:
ในการตั้งค่าตัวแปร env ในสมุดบันทึก jupyter เพียงใช้ไฟล์ %
คำสั่งมายากลอย่างใดอย่างหนึ่ง%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[var] = val
ในแบ็กเอนด์: github.com/ipython/ipython/blob/master/IPython/core/magics/…
kernel.json
ไฟล์ของคุณ:วิธีแก้ปัญหาของฉันมีประโยชน์หากคุณต้องการตัวแปรสภาพแวดล้อมเดียวกันทุกครั้งที่คุณเริ่มต้นเคอร์เนล jupyter โดยเฉพาะอย่างยิ่งถ้าคุณมีตัวแปรสภาพแวดล้อมหลายชุดสำหรับงานที่แตกต่างกัน
ในการสร้างเคอร์เนล ipython ใหม่ด้วยตัวแปรสภาพแวดล้อมของคุณให้ทำดังต่อไปนี้:
jupyter kernelspec list
เพื่อดูรายการที่ติดตั้งเคอร์เนลและตำแหน่งที่จัดเก็บไฟล์python2
) ไปยังไดเร็กทอรีใหม่ (เช่นpython2_myENV
)display_name
ใหม่kernel.json
env
พจนานุกรมที่กำหนดตัวแปรสภาพแวดล้อมเคอร์เนล json ของคุณอาจมีลักษณะเช่นนี้ (ฉันไม่ได้แก้ไขอะไรเลยจาก kernel.json ที่ติดตั้งยกเว้น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
ที่มีผลต่อการโหลดโมดูลที่คอมไพล์ (เช่นเขียนด้วย C) การตั้งค่าตัวแปรนี้โดยใช้%set_env
ไม่ได้ผลC:\Program Files (x86)\Graphviz2.38\bin\dot.exe
จะเพิ่มเส้นทางระบบที่มีอยู่โดยใช้เทคนิคที่คุณแนะนำได้อย่างไร จะใช้งานได้หรือไม่ถ้าฉันไม่ได้ใช้บัญชีผู้ดูแลระบบ ฉันใช้ Windows 10
sys.executable
เว้นแต่PYTHONEXECUTABLE
จะตั้งค่าไว้ล่วงหน้าซึ่งคุณต้องตั้งค่าก่อนที่ python จะทำงาน
หากคุณกำลังใช้งูหลามคุณสามารถกำหนดตัวแปรสภาพแวดล้อมของคุณใน.env
ไฟล์และโหลดจากภายในโน้ตบุ๊ค Jupyter ใช้หลาม dotenv
ติดตั้ง python-dotenv:
pip install python-dotenv
โหลด.env
ไฟล์ในสมุดบันทึก Jupyter:
%load_ext dotenv
%dotenv
คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมในโค้ดของคุณได้ดังนี้:
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
ข้อมูลเพิ่มเติมสามารถพบได้ที่นี่
%env MY_VAR=MY_VALUE
ควรเป็นคำตอบที่ถูกต้องสำหรับคำถามนี้
หากคุณจำเป็นต้องตั้งค่าตัวแปรก่อนที่คุณจะเริ่มต้นโน้ตบุ๊คเพียงการแก้ปัญหาที่ทำงานสำหรับฉันคือการenv VARIABLE=$VARIABLE jupyter notebook
ที่มีในexport VARIABLE=value
.bashrc
ในกรณีของฉัน tensorflow ต้องการตัวแปรที่ส่งออกเพื่อให้นำเข้าในสมุดบันทึกได้สำเร็จ
gotcha ฉันพบ: สองคำสั่งต่อไปนี้เทียบเท่ากัน หมายเหตุแรกไม่สามารถใช้เครื่องหมายคำพูด ในทางตรงกันข้ามการอ้างสตริงเมื่อใช้%env VAR ...
จะส่งผลให้อัญประกาศรวมเป็นส่วนหนึ่งของค่าของตัวแปรซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ
%env MYPATH=C:/Folder Name/file.txt
และ
import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"
หากคุณใช้ systemd ฉันเพิ่งพบว่าคุณต้องเพิ่มลงในไฟล์ systemd unit สิ่งนี้บน Ubuntu 16 การใส่ไว้ใน. profile และ. bashrc (แม้แต่ / etc / profile) ส่งผลให้ ENV Vars ไม่พร้อมใช้งานในโน้ตบุ๊ก juypter
ฉันต้องแก้ไข:
/lib/systemd/system/jupyer-notebook.service
และใส่ตัวแปรที่ฉันต้องการอ่านในไฟล์หน่วยเช่น:
Environment=MYOWN_VAR=theVar
จากนั้นฉันก็สามารถอ่านมันได้จากในสมุดบันทึกของผู้เล่น
โซลูชันที่เกี่ยวข้อง (ระยะสั้น) คือการจัดเก็บตัวแปรสภาพแวดล้อมของคุณในไฟล์เดียวโดยมีรูปแบบที่คาดเดาได้ซึ่งสามารถหาที่มาได้เมื่อเริ่มต้นเทอร์มินัลและ / หรืออ่านลงในสมุดบันทึก ตัวอย่างเช่นฉันมีไฟล์.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
ไฟล์นี้สามารถอยู่ได้ทุกที่และอ้างอิงโดยสัมพันธ์กับไดเร็กทอรีที่มีไฟล์โน้ตบุ๊ก นอกจากนี้ยังมีข้อดีของการไม่แสดงค่าตัวแปรภายในโค้ดของคุณที่ใดก็ได้