首页 > 编程问答 >在 jupyter Notebook 中导入自定义模块的问题

在 jupyter Notebook 中导入自定义模块的问题

时间:2024-08-06 15:36:32浏览次数:10  
标签:python machine-learning data-science jupyter importerror

假设我们有一个如下的文件结构,

#注意:不是实际的目录结构,而是类似的

root../
 tests../
 src../
    __init__.py
    utils../
       __init__.py
       data.py
       pipeline.py
    sqlal../
       __init__.py
       sql_alchm.py
    test.py
 process.ipynb

这里是 data.py 的示例

from abc import ABC

class DataStrategy(ABC):
    pass

这里是 test.py 的示例| ||现在我尝试运行我的 jupyter 笔记本 process.ipynb 中的所有导入,我收到如下错误

from utils.data import DataStrategy

class TestPipeline(DataStrategy):
    pass

但是如果我运行文件 test.py 我没有收到错误,这个错误是否与此有关与笔记本的范围...或者我错过了什么?

import os
from src.test import Test Pipeline
File c:\Users\ASUS\Desktop\AI-Projects\EasyML\ml_backend\src\data_scaling.py:9
      7 import pandas as pd
      8 from sklearn.base import *
----> 9 from utils.pipelines.pipeline import BasePipeline, Pipeline, DataStrategy
     11 # enable_iterative_imputer()
     13 class Scaler(DataStrategy, BasePipeline):

ModuleNotFoundError: No module named 'utils'

But if I run the file test.py I am not getting the error, Is this error has something to do with the scope of the notebook... or am I missing something?


你遇到的错误是因为Jupyter Notebook和你的 test.py 文件对模块搜索路径的解释不同。

问题根源:

  • 相对导入: 你的代码使用的是 相对导入 ,例如 from utils.data import DataStrategy 。相对导入是相对于 当前模块 而言的。在你的 test.py 文件中,由于它本身就在 src 文件夹下,所以 Python 能够正确地找到 utils 模块。
  • Jupyter Notebook 的工作目录: Jupyter Notebook 的工作目录通常是你启动 Notebook 的目录,而不是 Notebook 文件本身所在的目录。因此,当你尝试在 Notebook 中使用相对导入时,Python 会从 Notebook 的 工作目录 开始搜索,而不是从 Notebook 文件所在的目录开始搜索,导致找不到 utils 模块。

解决方案:

你有几种方法可以解决这个问题:

1. 使用绝对导入:

  • src 文件夹添加到 Python 的模块搜索路径中。你可以在 Notebook 的开头添加以下代码:

    python import sys sys.path.append(r'C:\Users\ASUS\Desktop\AI-Projects\EasyML\ml_backend') # 替换成你项目的实际路径 - 然后,你可以使用绝对导入来引用你的模块:

    python from src.utils.data import DataStrategy

2. 将项目转换为包:

  • 在你的 root 目录下创建一个空的 setup.py 文件。
  • 在你的 Notebook 中,使用 pip install -e . 命令安装你的项目。这会将你的项目作为一个包安装到你的环境中,并允许你使用绝对导入。

3. 改变 Jupyter Notebook 的工作目录:

  • 你可以使用 os 模块在 Notebook 的开头设置工作目录:

    python import os os.chdir(r'C:\Users\ASUS\Desktop\AI-Projects\EasyML\ml_backend\src') # 替换成你的 src 文件夹的路径 - 然后你可以像在 test.py 文件中那样使用相对导入。

推荐方案:

我建议你使用 将项目转换为包 的方法,因为它更符合 Python 的最佳实践,并且使得你的代码更易于维护和分发。

希望这些信息能帮助你解决问题!

标签:python,machine-learning,data-science,jupyter,importerror
From: 78837738

相关文章

  • python SQLite 访问组件
    importosimportsqlite3fromsqlite3importErrorfromqueueimportQueue,EmptyfromtypingimportList,Tuple,AnyclassSQLiteDB:default_db_path=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))default_db_file=default_db_path......
  • Python 卡在第 1 页
    让它读取下一页结果的最佳方法是什么?目前正在拉取数据,但只有第1页importrequestsimportjsonpage=1url="https://api-prod.grip.events/1/container/4368/search?search=&sort=name&order=asc&type_id=4907,4906,5265,4964,4904,1026,4908&page=%d"headers={......
  • 无法反序列化解码 JWT python 时的关键数据
    我正在使用pyjwt库来解码JWT令牌。我在解码时遇到此错误。代码在文档中给出。importjwtencoded_jwt='''eyJ0eXAiOiJKV1QiLCJhbG......'''secret=b''''-----BEGINPUBLICKEY-----MIIFRjCCBC6gAwIBAgIQCIdSGhpikQCjOIY154XoqzANBgkqhkiG9......
  • Python科研武器库 - 字符串操作 - 字符串开头结尾判断 startswith() endswith()
    使用场景:按照开头的前缀、结尾的后缀来判断、筛选目标字符串。使用函数:str.startswith(search_string,start,end)str.endswith(search_string,start,end)search_string:要匹配的目标字符串。start:要从中匹配search_string的str的起始索引。end:要考虑匹配的str的结......
  • 我正在 python 中使用 aspose.pdf 将 pdf 转换为 excel 。但问题是它只能将 pdf 的前
    `从tkinter导入*将aspose.pdf导入为ap从tkinter导入文件对话框importpandasaspdinput_pdf=filedialog.askopenfilename(filetypes=(("PDF文件",".pdf"),("所有文件",".")))output_file=filedialog.asksaveasfil......
  • 如何在selenium python中访问电子邮件中的所有文件夹
    我使用imaplib库,但有时无法访问某些帐户,我使用poplib但它只支持访问主邮箱,但不支持访问其他文件夹,如垃圾邮件我想使用imaplib,但不会出现有时甚至无法访问的错误尽管我有一个帐户,但我仍然可以访问它,或者是否有另一个库可以快速支持该帐户?你想要使用Selenium和Python......
  • python安装torch-cluster、torch-scatter、torch-sparse和torch-geometric | torch_ge
    1.检查CUDA版本【方法1】用nvidia-smi已装cuda,用nvidia-smi或nvcc-V查看【方法2】用torch已装torch,用torch代码打印importtorchprint(torch.__version__)#查看pytorch安装的版本号print(torch.cuda.is_available())#查看cuda是否可......
  • Python:学生成绩管理系统(大学编程期末实验)
    引言在这个信息时代,教育管理的自动化已成为提高效率的关键。本文将介绍如何使用Python开发一个学生成绩管理系统,旨在简化成绩记录、查询和分析的过程。创作灵感来源本项目灵感来源于我在教育机构的工作经历,以及对提高教育管理效率的持续追求。通过复盘过往项目,我意识到一个......
  • 手把手教你使用Python网络爬虫下载一本小说(附源码)
    大家好,我是Python进阶者。前言前几天【磐奚鸟】大佬在群里分享了一个抓取小说的代码,感觉还是蛮不错的,这里分享给大家学习。一、小说下载如果你想下载该网站上的任意一本小说的话,直接点击链接进去,如下图所示。只要将URL中的这个数字拿到就可以了,比方说这里是951,那么这个数字......
  • 借助 Transformer 实现美股价格的预测(Python干货)
    作者:老余捞鱼原创不易,转载请标明出处及原作者。写在前面的话:      Transformer是一种在自然语言处理等领域广泛应用的深度学习架构,与传统的循环神经网络(RNN)相比,Transformer可以并行处理输入序列的各个位置,大大提高了计算效率。而且通过多层的深度堆叠,能够学习......