将本地python文件导入Jupyter Notebook

问题描述 投票:0回答:4
我需要导入一些存储在本地内存中的 python 文件作为我的 Jupyter Notebook 中的模块。

我的jupyter笔记本存储在C:\snip\Pictures\demo中,我需要导入存储在C:\snip\Pictures\demo\mrcnn中的python文件。

当我尝试这个时:

from mrcnn import utils from mrcnn import visualize from mrcnn.visualize import display_images from mrcnn.visualize import display_instances import mrcnn.model as modellib from mrcnn.model import log from mrcnn.config import Config from mrcnn import model as modellib, utils
我收到此错误:

--------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-10-fdc1339465a7> in <module> 17 import matplotlib.image as mpimg 18 ---> 19 from mrcnn import utils 20 from mrcnn import visualize 21 from mrcnn.visualize import display_images ModuleNotFoundError: No module named 'mrcnn'
mrcnn 是文件夹名称,utils、visible... 是文件夹内的 python 文件。我该如何解决这个问题?

python python-3.x import jupyter-notebook anaconda
4个回答
2
投票
您所做的工作适用于使用 .py 文件,但 Jupyter 文件有点不同。您需要通过添加 %run 来导入模块 如果您还想使用 py 文件中的变量,请使用 %run -i。


1
投票
这样做。像这样打印

sys.path

。这列出了 python 解释器在执行 
import
 时正在查找的目录。

import sys print(sys.path)
Output (Something like this):

['/mnt/c/Users/lapto/Desktop/demos', '/home/elaaf/anaconda3/lib/python38.zip', '/home/elaaf/anaconda3/lib/python3.8', '/home/elaaf/anaconda3/lib/python3.8/lib-dynload', '/home/elaaf/anaconda3/lib/python3.8/site-packages', '/home/elaaf/anaconda3/lib/python3.8/site-packages/locket-0.2.1-py3.8.egg']
如果您当前的工作目录在输出列表中。
您的 

import

 呼叫不仅仅是不在当前目录中查找。

尝试将当前目录添加到

sys.path

并导入模块

import sys sys.path.append(".")
请告诉我这是否有帮助。


1
投票
这可能已经过时了。我看到这篇文章是因为我有同样的问题。当我看到 Vedant Modi 的评论说“做了一个新笔记本,它起作用了,不知道为什么”时,我想到尝试重新启动内核可能会起作用。是的,重新启动内核即可解决问题。


0
投票
我正在使用 VS Code 中的 Jupyter 笔记本,我面临着类似的挑战。我采用了这个方法:

文件夹结构

我想使用如下所示的简化文件夹结构来解释我的解决方案。我想在我的笔记本中重复使用

mymodule.py

 中的代码 
mynotebook1.ipynb

root | |----mynotebook1.ipynb | | |----mynotebook2.ipynb | |----modules | | | |-----__init__.py | | | |-----mymodule.py | |
mymodule.py 的内容

class MyAlgorithms(object): @staticmethod def some_implementation_1(): print("Inside implmentation 1" ) @staticmethod def some_implementation_2(): print("Inside implmentation 2" )


init.py的内容

请注意,我正在进行相对导入。

from .mymodule import MyAlgorithms __all__=["MyAlgorithms"]
启动 Jupyter 之前设置 PYTHONPATH 

这是重要的一步。通过这样做,我们使 Jupyter 的 Python 内核了解我们的文件夹结构,这使得模块的发现变得更容易。如果没有,我们最终会在笔记本中进行令人讨厌的

sys.path

 操作 - 我想避免这种情况。

如果使用 PowerShell

$env:PYTHONPATH=$PWD.Path
如果使用Windows CMD

set PYTHONPATH=%cd%


参考笔记本中mymodule.py的代码

import modules modules.MyAlgorithms.some_implementation_1()
这种方法的优点

    它让我可以在 Jupyter Notebook 之外的组织良好的类中保留更复杂的代码
  • 与所有代码都在笔记本中相比,我可以获得更好的 GIT 控制和更改跟踪
缺点

    当我对模块文件夹中的代码进行一些更改时,我必须重新启动 Jupyter 笔记本(主
  • 菜单-->内核-->重新启动内核)。

2024年4月12日更新

    强调
  • PYTHONPATH环境变量
  • Python 类中由于缩进而出现拼写错误
  • 更改为在
  • __init__.py
     中关联导入
    
© www.soinside.com 2019 - 2024. All rights reserved.