我用jupyter笔记本做数据分析已经有一段时间了.我想在我的jupyter笔记本目录中开发一个模块,并能够将新模块导入笔记本.我的jupyter笔记本文件目录可以表示为:;

Jupyter notebooks\

    notebook1.ipynb

    new_module\
        __init__.py
        newfunction.py

    currentnotebooks\
        notebook2.ipynb

当在记事本1中使用import new_module时.然而,当我在notebook2中try 相同的命令时,它仍然有效.我得到以下ImportError: No module named 'new_module'条.两个显而易见的解决方案是A)将新的_模块移动到CurrentNotebook目录或B)移动notebook2.ipynb达到与新的_模块相同的级别.我根本不想弄乱文件 struct .这可能吗?

推荐答案

您需要确保new_module的父目录位于python路径上.对于低于new_module级的笔记本电脑,此代码将实现以下功能:

import os
import sys
nb_dir = os.path.split(os.getcwd())[0]
if nb_dir not in sys.path:
    sys.path.append(nb_dir)

如果您在目录层次 struct 中处于较低的位置,则需要调整设置nb_dir的方式,但仅此而已.您应该为Jupyter notebooks中的笔记本运行这段代码,因为它会将该目录的父目录添加到python路径中,这可能是不可取的.

导入值为notebook1的原因是sys.path包含''(空字符串),它是运行解释器(本例中为内核)的当前目录.谷歌搜索explain python path可以很好地解释python如何使用PYTHONPATH(又名sys.path).

Python-3.x相关问答推荐

需要使用regex匹配字符串的帮助,直到最后一次出现开闭括号,开闭括号中的值是可选的

在Python中从mySQL获取多行

如何将多个字典合并到一个列中,并为不同的行使用相同的键

十进制浮点数到整型的转换错误

tkinter/python3.9 中的 Entry 子类和用户输入重复的问题

DataFrame列中如何迭代重复值?

调用 Clear 时 Airflow 会加载新代码吗

为什么 return node.next 会返回整个链表?

在 Django 中执行 JSONRenderer.render(serialized_student_data.data) 时遇到问题

如何在带有 GUI 的 python 游戏中设置回答时间限制?

有没有更好的方法来判断一个数字是否是两个数字的范围

获取比较多列的最大值并返回特定值

如何从左到右解包元组?

如何从另一个目录导入 python 包?

我们如何获得 __repr__() 的默认行为?

在 Pandas 数据框中显示对图

在不关心项目的情况下运行生成器功能的更简单方法

plt.cm.get_cmap 中可以使用哪些名称?

SQLAlchemy:如果不存在则创建模式

Python 3.4 多处理队列比 Pipe 快,出乎意料