Theo như tôi biết, Đây có 3 loại ipython được sử dụng ipykernel
ipython qtconsole
(viết tắt là "qtipython")
- IPython trong spyder (viết tắt là "spyder")
- IPython trong sổ ghi chép jupyter (viết tắt là "jn")
sử dụng 'spyder' in sys.modules
có thể phân biệt spyder
nhưng đối với qtipython và jn rất khó phân biệt nguyên nhân
chúng có cùng sys.modules
cấu hình IPython:get_ipython().config
Tôi tìm thấy sự khác biệt giữa qtipython và jn:
lần đầu tiên chạy os.getpid()
trong IPython shell lấy số pid
sau đó chạy ps -ef|grep [pid number]
pid qtipython của tôi là 8699
yanglei 8699 8693 4 20:31 ? 00:00:01 /home/yanglei/miniconda2/envs/py3/bin/python -m ipykernel_launcher -f /run/user/1000/jupyter/kernel-8693.json
pid jn của tôi là 8832
yanglei 8832 9788 13 20:32 ? 00:00:01 /home/yanglei/miniconda2/bin/python -m ipykernel_launcher -f /run/user/1000/jupyter/kernel-ccb962ec-3cd3-4008-a4b7-805a79576b1b.json
sự khác biệt của qtipython và jn là tên json của ipython, tên json của jn dài hơn qtipython
vì vậy, chúng tôi có thể tự động phát hiện tất cả Môi trường Python bằng mã sau:
import sys,os
def jupyterNotebookOrQtConsole():
env = 'Unknow'
cmd = 'ps -ef'
try:
with os.popen(cmd) as stream:
if not py2:
stream = stream._stream
s = stream.read()
pid = os.getpid()
ls = list(filter(lambda l:'jupyter' in l and str(pid) in l.split(' '), s.split('\n')))
if len(ls) == 1:
l = ls[0]
import re
pa = re.compile(r'kernel-([-a-z0-9]*)\.json')
rs = pa.findall(l)
if len(rs):
r = rs[0]
if len(r)<12:
env = 'qtipython'
else :
env = 'jn'
return env
except:
return env
pyv = sys.version_info.major
py3 = (pyv == 3)
py2 = (pyv == 2)
class pyi():
'''
python info
plt : Bool
mean plt avaliable
env :
belong [cmd, cmdipython, qtipython, spyder, jn]
'''
pid = os.getpid()
gui = 'ipykernel' in sys.modules
cmdipython = 'IPython' in sys.modules and not gui
ipython = cmdipython or gui
spyder = 'spyder' in sys.modules
if gui:
env = 'spyder' if spyder else jupyterNotebookOrQtConsole()
else:
env = 'cmdipython' if ipython else 'cmd'
cmd = not ipython
qtipython = env == 'qtipython'
jn = env == 'jn'
plt = gui or 'DISPLAY' in os.environ
print('Python Envronment is %s'%pyi.env)
mã nguồn ở đây: Môi trường Python phát hiện, Đặc biệt phân biệt Spyder, sổ ghi chép Jupyter, Qtconsole.py