【问题标题】:How do I import module in jupyter notebook directory into notebooks in lower directories? [duplicate]如何将 jupyter notebook 目录中的模块导入到较低目录的 notebook 中? [复制]
【发布时间】:2017-01-11 00:13:02
【问题描述】:

我使用 jupyter notebook 进行数据分析已经有一段时间了。我想在我的 jupyter notebook 目录中开发一个模块,并能够将该新模块导入到笔记本中。我的jupyter notebook文件目录可以表示如下;

Jupyter notebooks\

    notebook1.ipynb

    new_module\
        __init__.py
        newfunction.py

    currentnotebooks\
        notebook2.ipynb

当在 notebook1.ipynb 中使用 import new_module 时,它可以工作,但是当我在 notebook2.ipynb 中尝试相同的命令时,我得到以下 ImportError: No module named 'new_module'。两个明显的解决方案是 A) 将 new_module 移动到 currentnotebooks 目录或 B) 将 notebook2.ipynb 移动到与 new_module 相同的级别。我根本不想弄乱文件结构。这可能吗?

【问题讨论】:

  • 如果您将new_module 放入sys.path 中列出的目录之一,它将可以从任何地方导入。

标签: python python-3.x ipython python-import jupyter-notebook


【解决方案1】:

您需要确保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)

如果您在目录层次结构中更靠后,则需要调整nb_dir 的设置方式,仅此而已。您应该Jupyter notebooks 中的笔记本运行此代码,因为它会将该目录的父目录添加到python 路径中,这可能是不可取的。

导入适用于notebook1 的原因是 sys.path 包含''(空字符串),它远离正在运行的解释器(在本例中为内核)的当前目录。谷歌搜索explain python path 可以找到关于python 如何使用PYTHONPATH(又名sys.path)的几个很好的解释。

【讨论】:

  • 所以我总是必须先执行您建议的样板代码,然后才能访问其他模块,即使它们只是上面的一个文件夹?有没有其他合适的方法来实现这一点,例如通过相对进口? (尽管我必须承认我仍然不确定相对导入是如何工作的)
  • 或多或少。例外情况是父目录也是一个模块(因此有一个__init__.py 文件),但这对我来说既奇怪又不太可能。将 notebook 目录放在 PYTHONPATH 中可以避免以这种方式将其添加到 sys.path 中。
猜你喜欢
  • 2017-10-04
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 2016-11-29
  • 2016-06-10
  • 2018-08-22
  • 2020-10-07
相关资源
最近更新 更多