文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- notebook中使用shell命令
- Magic命令
- Debug基础教学
- 1.无PDB程序举例
- 2. 引入PDB
- 3.指令说明
- 4. IPDB
- 参考
查看当前挂载的数据集目录
!ls /home/aistudio/data/
显示当前路径
!pwd
使用pip来安装自己需要的package (但不支持apt-get)
!pip install package_name
查看当前环境中安装的package
!pip list --format=columns
持久化安装
如果需要进行持久化安装, 需要使用持久化路径, 如下方代码示例:
!mkdir /home/aistudio/external-libraries !pip install beautifulsoup4 -t /home/aistudio/external-libraries
同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可:
import sys
sys.path.append('/home/aistudio/external-libraries')
使用git命令来同步代码 (暂时需要Paddle 1.4.1以上)
%cd work/
/home/aistudio/work
!git clone https://github.com/PaddlePaddle/Paddle.git #Paddle官方模型
Magic命令
- Magic命令是Notebook的高级用法,可以运行一些特殊的指令。
- Magic 命令的前面带有一个或两个百分号(% 或 %%),分别代表行 Magic 命令和单元格 Magic 命令。
- 行 Magic 命令仅应用于编写 Magic 命令时所在的行,而单元格 Magic 命令应用于整个单元格。
#显示全部可用的Magic命令
%lsmagic
Available line magics:
%alias %alias_magic %autoawait %autocall %automagic %autosave %bookmark %cat %cd %clear %colors %config %connect_info %cp %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %killbgscripts %ldir %less %lf %lk %ll %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %lx %macro %magic %man %matplotlib %mkdir %more %mv %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %popd %pprint %precision %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %rep %rerun %reset %reset_selective %rm %rmdir %run %save %sc %set_env %store %sx %system %tb %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode
Available cell magics:
%%! %%HTML %%SVG %%bash %%capture %%debug %%file %%html %%javascript %%js %%latex %%markdown %%perl %%prun %%pypy %%python %%python2 %%python3 %%ruby %%script %%sh %%svg %%sx %%system %%time %%timeit %%writefile
Automagic is ON, % prefix IS NOT needed for line magics.
#使用Magic命令来统计运行时长
import random
%%timeit
prize = 0
for i in range(100):
roll = random.randint(1, 6)
if roll%2 == 0:
prize += roll
else:
prize -= 1
175 µs ± 2.12 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
还可以直接嵌入可视化内容, 例如%matplotlib inline:
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,1,300)
for w in range(2,6,2):
plt.plot(x, np.sin(np.pi*x)*np.sin(2*w*np.pi*x))
当前技术架构局限, 一个Cell里面只能输出一张图片. 如果输出多张图片, 可能会有显示异常的问题.
%env:设置环境变量
使用该命令, 可以在不必重启Kernel的情况下管理notebook的环境变量
# Running %env without any arguments # lists all environment variables # The line below sets the environment # variable OMP_NUM_THREADS %env OMP_NUM_THREADS=4
env: OMP_NUM_THREADS=4
%run: 运行python代码
使用%run 可以运行.py格式的python代码,用!python也是可以的。
%run work/SampleOfRun.py
It’s a demo code written in file SampleOfRun.py
%%writefile and %pycat: 导出cell内容/显示外部脚本的内容
%%writefile SaveToPythonCode.py
from math import sqrt
for i in range(2,10):
flag=1
k=int(sqrt(i))
for j in range(2,k+1):
if i%j==0:
flag=0
break
if(flag):
print(i)
Writing SaveToPythonCode.py
从中读文件内容
%pycat SaveToPythonCode.py
更多Magic命令可以点击这里查询 Magic命令
关于快速查看某个对象/方法/接口的用法
在要查询的对象前输入?或??并执行即可. 单问号是普通信息, 双问号是详细信息.
前提: 该对象方法已经被正确导入(import)
import paddle import paddle.fluid ?paddle.fluid.layers.conv3d
关于变量监控
可以通过修改内核选项ast_note_interactivity,使得Jupyter对独占一行的所有变量或者语句都自动显示,这样就可以马上看到多个语句的运行结果了。
!pip install pydataset
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
from pydataset import data
quakes = data('quakes')
quakes.head()
quakes.tail()
initiated datasets repo at: /home/aistudio/.pydataset/
lat long depth mag stations
1 -20.42 181.62 562 4.8 41
2 -20.62 181.03 650 4.2 15
3 -26.00 184.10 42 5.4 43
4 -17.97 181.66 626 4.1 19
5 -20.42 181.96 649 4.0 11
lat long depth mag stations
996 -25.93 179.54 470 4.4 22
997 -12.28 167.06 248 4.7 35
998 -20.13 184.20 244 4.5 34
999 -17.40 187.80 40 4.5 14
1000 -21.59 170.56 165 6.0 119
关于调试代码
Notebook自带一个调试器, 叫The Python Debugger (pdb),我们来看看它是如何工作的.
# 对, 它也是依赖Magic命令启动的.
# 理论上pdb是可以通过脚本形式来启动. 但是在Notebook中不行, 会造成阻断
%pdb
def reverse(x: int) -> int:
inputnumber = x.__str__()
reversedStr = inputnumber[::-1]
strOriLen = len(reversedStr)
result = list()
flag = 1
for i in range(0, strOriLen):
if i == (strOriLen -1) and reversedStr[i] == '-' :
flag = -1
else:
result.append(reversedStr[i])
outputs = ''.join(result)
outputInt = int(outputs)
outputInt = outputInt * flag
if outputInt > pow(2,31)-1 or outputInt < -1 * pow(2,31):
outputInt = 0
return outputInt
print(reverse(134))
Debug基础教学Automatic pdb calling has been turned OFF
431
- Python自带一个调试器, 在Python 3.7之后甚至成为内置调试器,这就是PDB。
- 它基本上是一个交互式源代码调试器。
import pdb
class MyScrapy:
urls = []
def start_url(self, urls):
pdb.set_trace()
for url in urls:
print(url)
self.urls.append(url)
def parse(self):
pdb.set_trace()
for url in self.urls:
result = self.request_something(url)
def request_something(self, url):
print('requesting...')
data = '''
Title
'''
return data
scrapy= MyScrapy()
scrapy.start_url(["http://www.zone7.cn", "http://www.zone7.cn", "http://www.zone7.cn", "http://www.zone7.cn", ])
scrapy.parse()
1.无PDB程序举例
import sys
def add(num1=0, num2=0):
return int(num1) + int(num2)
def sub(num1=0, num2=0):
return int(num1) - int(num2)
def main():
#Assuming our inputs are valid numbers
num1 = 0
num2 = 2
addition = add(num1, num2)
print (addition)
subtraction = sub(num1, num2)
print (subtraction)
if __name__ == '__main__':
main()
2. 引入PDB2
-2
import pdb pdb.set_trace()
import pdb
import sys
def add(num1=0, num2=0):
return int(num1) + int(num2)
def sub(num1=0, num2=0):
return int(num1) - int(num2)
def main():
#Assuming our inputs are valid numbers
num1 = 33
num2 = 44
pdb.set_trace() # <-- 这个表示添加断点
addition = add(num1, num2)
print (addition)
subtraction = sub(num1, num2)
print (subtraction)
if __name__ == '__main__':
main()
一旦开始运行, 会出现交互框,如下图所示:
在这个输入框里敲入命令, 即可开始调试。
① 下一行 - > n
在输入框里, 输入n, 可转到下一行
这将执行当前代码行,现在可以执行下一行。
可以使用n逐行遍历整个程序。
② 打印 - > p
如果想知道num1或num2包含什么,可以在输入框里输入:
p num1
如截图所示:
回车
方便查看变量实际存储的值。
③ 动态添加断点 - > b
运行程序之前,使用了pdb.set_trace()来设置断点。
若想在调试会话开始后,在程序的特定位置添加断点,可以输入b。
④ 动态分配变量
在调试会话期间可以分配变量以帮助调试。
输入后运行
⑤ 退出 - > q
想在任何时候退出,可以使用q。正在执行的程序被中止。
IPDB 用法和PDB相似,不过返回的输出是彩色的。
ENTER (重复上次命令)
- c (继续)
- l (查找当前位于哪里)
- s (进入子程序,如果当前有一个函数调用,那么 s 会进入被调用的函数体)
- n(ext) 让程序运行下一行,如果当前语句有一个函数调用,用 n 是不会进入被调用的函数体中的
- r (运行直到子程序结束)
- !
- h (帮助)
- a(rgs) 打印当前函数的参数
- j(ump) 让程序跳转到指定的行数
- l(ist) 可以列出当前将要运行的代码块
- p(rint) 最有用的命令之一,打印某个变量
- q(uit) 退出调试
- r(eturn) 继续执行,直到函数体返回
可以运行下方代码来安装ipdb
!pip install ipdb -i https://pypi.tuna.tsinghua.edu.cn/simple
参考
【飞桨 AI Studio】Notebook基础操作
【飞桨 AI Studio】Debug基础教学



