Tôi gặp sự cố là Jupyter không thể thấy biến env trong tệp bashrc, có cách nào để tải các biến này trong jupyter hoặc thêm biến custome vào không?
Tôi gặp sự cố là Jupyter không thể thấy biến env trong tệp bashrc, có cách nào để tải các biến này trong jupyter hoặc thêm biến custome vào không?
Câu trả lời:
Để đặt một biến env trong sổ ghi chép jupyter, chỉ cần sử dụng %
lệnh ma thuật, hoặc %env
hoặc %set_env
, ví dụ: %env MY_VAR=MY_VALUE
hoặc %env MY_VAR MY_VALUE
. (Sử dụng %env
chính nó để in ra các biến môi trường hiện tại.)
Xem: http://ipython.readthedocs.io/en/stable/interactive/magics.html
os.environ[var] = val
trên phụ trợ: github.com/ipython/ipython/blob/master/IPython/core/magics/…
kernel.json
tệp của mình :Giải pháp của tôi rất hữu ích nếu bạn cần các biến môi trường giống nhau mỗi khi khởi động nhân jupyter, đặc biệt nếu bạn có nhiều bộ biến môi trường cho các tác vụ khác nhau.
Để tạo một hạt nhân ipython mới với các biến môi trường của bạn, hãy làm như sau:
jupyter kernelspec list
để xem danh sách có các hạt nhân đã cài đặt và nơi các tệp được lưu trữ.python2
) sang một thư mục mới (ví dụ python2_myENV
).display_name
trong kernel.json
tệp mới .env
từ điển xác định các biến môi trường.Kernel json của bạn có thể trông như thế này (Tôi không sửa đổi bất cứ thứ gì từ kernel.json đã cài đặt ngoại trừ display_name
và 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
ảnh hưởng đến cách tải các mô-đun đã biên dịch (ví dụ: được viết bằng C). Đặt biến này bằng cách sử dụng %set_env
không hoạt động.C:\Program Files (x86)\Graphviz2.38\bin\dot.exe
vào đường dẫn hệ thống hiện có bằng kỹ thuật đề xuất của bạn không? Nó sẽ hoạt động nếu tôi không sử dụng tài khoản quản trị viên? Tôi đang sử dụng Windows 10.
sys.executable
trừ khi PYTHONEXECUTABLE
được đặt trước, điều này bạn phải đặt trước khi python chạy.
Nếu đang sử dụng Python, bạn có thể xác định các biến môi trường của mình trong một .env
tệp và tải chúng từ trong sổ ghi chép Jupyter bằng python-dotenv .
Cài đặt python-dotenv:
pip install python-dotenv
Tải .env
tệp vào sổ ghi chép Jupyter:
%load_ext dotenv
%dotenv
Bạn có thể thiết lập các biến môi trường trong mã của mình như sau:
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')
Tất nhiên, đây là bản sửa lỗi tạm thời, để có được một bản sửa chữa vĩnh viễn, bạn có thể cần xuất các biến vào của mình ~.profile
, bạn có thể tìm thêm thông tin tại đây
%env MY_VAR=MY_VALUE
phải là câu trả lời đúng cho câu hỏi này
Một vấn đề tôi gặp phải: Hai lệnh sau là tương đương. Lưu ý đầu tiên không thể sử dụng dấu ngoặc kép. Nói cách khác, trích dẫn chuỗi khi sử dụng %env VAR ...
sẽ dẫn đến việc các dấu ngoặc kép được bao gồm như một phần giá trị của biến, điều này có thể không phải là điều bạn muốn.
%env MYPATH=C:/Folder Name/file.txt
và
import os
os.environ['MYPATH'] = "C:/Folder Name/file.txt"
Nếu bạn đang sử dụng systemd, tôi vừa phát hiện ra rằng bạn dường như phải thêm chúng vào tệp đơn vị systemd. Điều này trên Ubuntu 16. Việc đưa chúng vào .profile và .bashrc (thậm chí là / etc / profile) dẫn đến các ENV Vars không khả dụng trong sổ ghi chép juypter.
Tôi đã phải chỉnh sửa:
/lib/systemd/system/jupyer-notebook.service
và đặt biến tôi muốn đọc trong tệp đơn vị như:
Environment=MYOWN_VAR=theVar
và chỉ sau đó tôi mới có thể đọc nó từ trong sổ tay juypter.
Một giải pháp liên quan (ngắn hạn) là lưu trữ các biến môi trường của bạn trong một tệp duy nhất, với định dạng có thể dự đoán được, có thể được lấy ra khi khởi động thiết bị đầu cuối và / hoặc đọc vào sổ ghi chép. Ví dụ: tôi có một tệp, .env
có định nghĩa biến môi trường của tôi ở định dạng VARIABLE_NAME=VARIABLE_VALUE
(không có dòng trống hoặc dấu cách thừa). Bạn có thể nguồn tệp này trong .bashrc
hoặc .bash_profile
tệp khi bắt đầu một phiên đầu cuối mới và bạn có thể đọc tệp này vào sổ ghi chép với nội dung như,
import os
env_vars = !cat ../script/.env
for var in env_vars:
key, value = var.split('=')
os.environ[key] = value
Tôi đã sử dụng một đường dẫn tương đối để cho thấy rằng .env
tệp này có thể sống ở bất kỳ đâu và được tham chiếu liên quan đến thư mục chứa tệp sổ ghi chép. Điều này cũng có lợi thế là không hiển thị các giá trị biến trong mã của bạn ở bất kỳ đâu.