繁体   English   中英

如何在python中编辑和调试库?

[英]How to edit and debug a library in python?

我已经创建了一个我自己的库(包)并使用 pip install -e 作为开发安装现在,我想编辑这个库(.py)文件并在 jupyter notebook 中查看更新。 每次,我都会编辑一个库(.py)文件,然后关闭并重新打开 ipython notebook 以查看更新。 有没有简单的方法来编辑和调试 .py 包文件?

将其作为笔记本的第一个单元格:

%load_ext autoreload
%autoreload 2

文档中的更多信息。

当您加载 jupyter 时,您正在初始化一个 python 内核。 这会将您的 python 锁定到您加载内核时所处的环境。

在这种情况下,您的内核在您加载 jupyter 时包含本地 egg 安装包。 不幸的是,每次更新本地包时都需要重新加载 jupyter。

@BlackBear 有一个很好的解决方案,可以在您的第一个单元格中使用 autoreload:

%load_ext autoreload
%autoreload 2

后续解决方案假定您不需要对笔记本进行更改,而只希望在对包进行更改的情况下更新输出。 我解决这个问题的一种方法是使用 jupyter nbconvert 和 shell 脚本来使用自动笔记本生成过程。 您基本上创建了一些存储在templates文件夹中的 jupyter 模板,您将在每次更新包时自动执行这些templates

一个示例脚本:

rm ./templates/*.nbconvert.ipynb
rm ./*.nbconvert.ipynb

for file in "templates"/*.ipynb
do
  echo $file
  jupyter nbconvert --to notebook --execute $file
done

mv ./templates/*.nbconvert.ipynb .

假设您想主动调试您的包,我建议您编写测试脚本,每次都加载一个新内核。 例如:

#mytest.py
from mypackage import myfunction

expected_outputs={'some':'expected','outputs':'here'}
if myfunction(inputs)==expected_outputs:
    print('Success')
else:
    print('Fail')


python3 mytest.py

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM