在jupyter notebook中,因为其解析文件的方式是基于json的,所以其默认保存的文件格式不是.py而是.ipynb。而.ipynb文件并不能简单的import进.py或者.ipynb文件中,这就为开发带来了极大不便。因为在jupyter notebook中,一定要是在默认的.ipynb下才能有一系列的特性支持,比如自动补全,控制台等待,而.py文件只能通过文本编辑器修改,非常非常不便。
因为.ipynb可以import .py的module,所以其中一个解决方法是将已经写好的.ipynb格式的module转换成.py文件。在写好的.ipynb文件的最后新建一个cell,写入代码如下:
try: !jupyter nbconvert --to python file_name.ipynb # python即转化为.py,script即转化为.html # 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 hello
重新导入hello模块:
from imp import reload reload(hello) hello()
这时候会输出:say hello, bye
bingo!
以上这篇解决Jupyter notebook中.py与.ipynb文件的import问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]