当前位置: 首页 > 知识库问答 >
问题:

从父目录中的python模块导入子目录中的jupyter笔记本文件

段干华晖
2023-03-14

我有一个这样的文件结构:

project_folder/
     notebooks/
          notebook01.ipynb
          notebook02.ipynb
          ...
          notebookXY.ipynb
     module01.py
     module02.py
     module03.py

中。ipynb笔记本中的文件我想从module01导入类和函数。py,module02。py模块03。py

我已经找到了这个问题的答案,可以在每个笔记本中使用以下代码行,并每次将这些代码行作为第一个单元格运行:

import os
import sys
module_path = os.path.abspath(os.path.join('..'))
if module_path not in sys.path:
    sys.path.append(module_path)

有没有更好的办法?如果我有很多,该怎么办。ipynb笔记本中的文件文件夹,我是否必须将这些代码行粘贴到每一行的开头?有更好、更简约或更干净的方法吗?

共有2个答案

归泽宇
2023-03-14

另一个解决方案是将所有Python模块(.py文件)移动到一个文件夹中,并使它们成为可安装的包。如果pip将其安装到当前环境中,则可以将该软件包导入该环境中的任何笔记本,而不考虑文件夹结构。

所以在你的情况下,你可以:

project_folder/
  notebooks/
    notebook01.ipynb
    notebook02.ipynb
    ...
    notebookXY.ipynb
  my_package/
    __init__.py
    module01.py
    module02.py
    module03.py
  setup.py
  • __初始化。py可以只是一个空文件,并告诉Python“此文件夹中的所有内容都是包的一部分”
  • 有关设置中的内容的说明。请看这里

基本设置。py可以如此简单:

import setuptools

setuptools.setup(
    name="my_package",
    version="0.0.1",
    description="A small example package",
    packages=setuptools.find_packages(),
    python_requires='>=3.7',
)

安装它:

cd project_folder
pip install [-e] .

包括可选的-e标志将在可编辑模式下安装my_package,这意味着将创建一个符号链接到它们所在的文件,而不是将文件复制到虚拟环境中。

现在,在任何笔记本中,您都可以执行以下操作:

导入我的\u包

我的_包中的。模块01导入

须鸿祯
2023-03-14

尝试将project\u文件夹添加到PYTHONPATH环境变量中。这将允许您告诉python在该目录中搜索导入。

您可以在用户配置文件设置中或在启动脚本中执行此操作,而不是在python中。在python运行之前,必须对其进行设置。

 类似资料:
  • 问题内容: 我有以下内容: 我正在尝试从父目录导入。在这种情况下,我尝试从测试文件夹中运行“ UnitTest1.py”,并从其上方的目录(文件“ ModuleFile.py”)导入。 我知道已经有很多答案。 SO问题1,SO问题2,其他所有SO问题。我只是找不到“使用../”作为相对导入而不是显式路径。 我知道从Python 2.5开始,根据提到使用的文档,它们支持“相对导入”,但是我专门尝试这

  • 问题内容: 如何导入驻留在父目录中的模块(python文件)? 这两个目录中都有文件,但是我仍然无法从父目录导入文件? 在此文件夹布局中,脚本B尝试导入脚本A: 脚本B中的以下代码不起作用: 问题答案: 您无需在Python中导入脚本,而可以导入模块。一些python模块也是可以直接运行的脚本(它们在模块级别上做了一些有用的工作)。 通常,最好使用绝对进口,而不是相对进口。 在: 如果您想作为脚本

  • 问题内容: 目录结构: module1.py: 我如何才能将所有模块从模块添加到主类而没有前缀(即像foo = fooBar()一样使用它们,而不是foo = my_modules.module1.fooBar())。 一个明显的决定是在main.py中编写如下内容: 但是我不想在创建新的moduleN时更改main.py。有解决方案吗? 我确实知道导入这样的类不是一个好主意,但是我对此仍然很好奇

  • 我想将一些通用功能外包给一个模块中的多个笔记本电脑(也用于测试目的)。当前目录结构如下所示 在中,有一个简单的函数 然而,当我想导入和使用在通过使用(我认为有意义的) 我得到一个。我做错了什么?我正在使用Python 3.9。

  • 问题内容: 我有一个类似于以下内容的目录结构 当在工作,如果我尝试使用相对导入来访问函数在有: 我收到以下错误: 有什么办法可以使用相对导入来使它起作用? 注意,笔记本服务器是在目录级别实例化的,因此它应该有权访问这些文件中的信息。 同样要注意的是,至少没有按照最初的意图被认为是模块,因此没有文件,它只是作为文件系统目录。如果要解决问题,则需要将其视为模块并包括一个很好的文件(甚至是空白文件),但

  • 干杯大家, 我需要python 3.6的帮助。所以我有这样的数据结构: 我目前正在主目录所在的目录下工作,所以我不需要在此之前指定路径。首先,我想遍历主目录,找到所有子目录。然后我想在他们每一个人身上找到。wav文件,当处理完这些文件后,我想转到下一个子目录,以此类推,直到它们都被打开。处理wav文件。这正是我想做的。wav文件被输入到我的程序中,处理它们,这样我就可以把它们转换成numpy数组,