[英]Python Tutor + Google Colab
序言。 我正在尝试使用 Google Colab 来教学生 Python。问题是,没有很好的工具来可视化代码执行。 我尝试通过将 Python Tutor 与 Google Colab 集成来使用它,即创建了一个“魔术命令”
from IPython.core.magic import Magics, magics_class, cell_magic, line_magic
@magics_class
class Helper(Magics):
def __init__(self, shell=None, **kwargs):
super().__init__(shell=shell, **kwargs)
@cell_magic
def debug_cell_with_pytutor(self, line, cell):
import urllib.parse
url_src = urllib.parse.quote(cell)
str_begin = '<iframe width="1000" height="500" frameborder="0" src="https://pythontutor.com/iframe-embed.html#code='
str_end = '&cumulative=false&py=3&curInstr=0"></iframe>'
import IPython
from google.colab import output
display(IPython.display.HTML(str_begin+url_src+str_end))
get_ipython().register_magics(Helper)
以后可以用作
%%debug_cell_with_pytutor
total_list = []
for i in range(3):
total_list.append(i)
total_list
问题。 其实有两个问题:
我在寻求什么帮助。 我想在 Google Colab 中启动 Python Tutor,或者寻找可以在 Colab 中使用的任何其他不错的可视化工具。
先感谢您!
更新
在一天结束时,我找到了一些解决方案,但它非常混乱。 如果有人提出更好的建议,我会很高兴。
目前代码看起来像
#@title #Helper functions (debugger)
!curl -O https://raw.githubusercontent.com/fbeilstein/machine_learning/master/pytutor/data_begin.html
!curl -O https://raw.githubusercontent.com/fbeilstein/machine_learning/master/pytutor/data_end.html
!curl -O https://raw.githubusercontent.com/fbeilstein/machine_learning/master/pytutor/pg_encoder.py
!curl -O https://raw.githubusercontent.com/fbeilstein/machine_learning/master/pytutor/pg_logger.py
from IPython.core.magic import Magics, magics_class, cell_magic, line_magic
@magics_class
class Helper(Magics):
def __init__(self, shell=None, **kwargs):
super().__init__(shell=shell, **kwargs)
with open('data_begin.html', 'r') as f_in:
lines = f_in.readlines()
self.begin_debug = "".join(lines)
with open('data_end.html', 'r') as f_in:
lines = f_in.readlines()
self.end_debug = "".join(lines)
@cell_magic
def debug_cell_with_pytutor(self, line, cell):
import json
import bdb
from pg_logger import PGLogger
import IPython
from google.colab import output
def cgi_finalizer(input_code, output_trace):
ret = dict(code=input_code, trace=output_trace)
json_output = json.dumps(ret, indent=None) # use indent=None for most compact repr
display(IPython.display.HTML("<html>" + self.begin_debug + json_output + self.end_debug + "</html>"))
logger = PGLogger(cumulative_mode=False,
heap_primitives=False,
show_only_outputs=False,
finalizer_func=cgi_finalizer,
disable_security_checks=True,
allow_all_modules=True,
probe_exprs=False)
try:
logger._runscript(cell)
except bdb.BdbQuit:
print("INTERNAL ERROR OCCURED")
finally:
logger.finalize()
## use ipython load_ext mechanism here if distributed
get_ipython().register_magics(Helper)
帮助程序文件存储在我的 GitHub 机器学习课程存储库中。 我根据GraphTerm 的想法和来自PyTutor 存储库的资源创建了它们。 在第二讲“Python”中可以找到一些使用示例,但是资料比较多,可能需要一些时间才能找到。
在它之前使用%%debug_cell_with_pytutor
尝试您现有的代码(以下部分):
from IPython.core.magic import Magics, magics_class, cell_magic, line_magic
@magics_class
class Helper(Magics):
def __init__(self, shell=None, **kwargs):
super().__init__(shell=shell, **kwargs)
@cell_magic
def debug_cell_with_pytutor(self, line, cell):
import urllib.parse
url_src = urllib.parse.quote(cell)
str_begin = '<iframe width="1000" height="500" frameborder="0" src="https://pythontutor.com/iframe-embed.html#code='
str_end = '&cumulative=false&py=3&curInstr=0"></iframe>'
import IPython
from google.colab import output
display(IPython.display.HTML(str_begin+url_src+str_end))
get_ipython().register_magics(Helper)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.