问题描述
│
└───foo_lib
│ │ bar.py
│
└───notebooks
│ my_notebook.ipynb
所以基本上我在 foo_lib
中有一些通用的 Python 代码,在 notebooks
中有一些笔记本
在 my_notebook
中,我想使用 foo_lib
中的代码。所以我这样做:
from foo_lib import bar
但这不起作用,因为当笔记本执行时,repo 的根不在我的 python 路径中。
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-1-e2c421feccf4> in <module>
----> 1 from foo_lib import bar
ModuleNotFoundError: No module named 'foo_lib'
我一直在使用的技巧是将 %cd ..
放在第一个单元格中。然后工作目录是 repo 的根目录,我可以正常导入。但它不是幂等的,所以如果我多次运行单元格,导入会再次中断。
我找到了一个幂等的解决方案。在 jupyter 中运行时,我可以使用 globals()["_dh"][0]
指向包含笔记本的目录:
import os
os.chdir(os.path.join(globals()["_dh"][0],".."))
不幸的是,当我使用 nbconvert
以编程方式运行笔记本时,这不起作用:
import json
import nbconvert
import nbformat
def run_notebook():
ep = nbconvert.preprocessors.ExecutePreprocessor()
with open("notebooks/my_notebook.ipynb") as fp:
nb = nbformat.read(fp,as_version=4)
nb,resources = ep.preprocess(nb)
print(json.dumps(nb,indent=2))
if __name__ == "__main__":
run_notebook()
当我从存储库的根目录运行此脚本时,globals()["_dh"][0]
指向存储库的根目录
有没有更好的方法来做到这一点?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)