解决Jupyternotebook中.py与.ipynb⽂件的import问题
office怎么使用模板在jupyter notebook中,因为其解析⽂件的⽅式是基于json的,所以其默认保存的⽂件格式不是.py⽽是.ipynb。⽽.ipynb⽂件并不能简单的import进.py或者.ipynb⽂件中,这就为开发带来了极⼤不便。因为在jupyter notebook中,⼀定要是在默认的.ipynb 下才能有⼀系列的特性⽀持,⽐如⾃动补全,控制台等待,⽽.py⽂件只能通过⽂本编辑器修改,⾮常⾮常不便。
marquee boost波神因为.ipynb可以import .py的module,所以其中⼀个解决⽅法是将已经写好的.ipynb格式的module转换成.py⽂件。在写好
的.ipynb⽂件的最后新建⼀个cell,写⼊代码如下:
try:
!jupyter nbconvert --to python file_name.ipynb
# python即转化为.py,script即转化为.htmlpython解析json文件
# file_name.ipynb即当前module的⽂件名
except:
pass
然后在当前⽬录下会⽣成⼀个同名的.py⽂件,这个module可以在其他.ipynb中被import。但这样转化出的.py⽂件中有时候会保留上述代码。如果要完全避免的话,可以专门另写⼀个转换⽂件,集中存放所有⽂件的转换语句。
补充知识:jupyter notebook的project管理——.ipynb中调⽤.py⽂件
做课题和数据挖掘竞赛⽤python⽐较多,⽐较常⽤的是在服务器终端输⼊jupyter notebook --ip 0.0.0.0,打开jupyter notebook 的⼀个后台,并在本地windows电脑浏览器进⼊该服务端写python代码。
将.ipynb和.py结合,可以使得jupyter notebook的⼯程⽂件⽬录更有条理,⼀些函数可以定义在.py⽂件中,需要调⽤这些⽂件时,就导⼊到.ipybn中执⾏。
那在jupyter notebook中调⽤同,怎么在.ipynb.py中调⽤.py⽂件呢?
举个栗⼦:
在同⼀个⽬录下,有call_hello.ipynb和hello.py两个⽂件:
hello.py中定义了hello函数如下:
def hello():
print('say hello');
在call_hello.ipynb中调⽤hello()函数:
from hello import *
hello()
输出: say hello
但是修改.py⽂件中的代码后,必须在ipynb中reload模块,才会⽣效。
如果hello.py中的代码修改成:
def hello():
print('say hello,bye');
在call_hello.ipynb中再次调⽤hello()函数,依然输出:say helloascii码有多少个字符
重新导⼊hello模块:
from imp import reload
reload(hello)
android现在难工作了hello()
这时候会输出:say hello, byepickled pepper是什么意思
bingo!
以上这篇解决Jupyter notebook中.py与.ipynb⽂件的import问题就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论